From nobody Fri Dec 19 18:47:07 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1738953513; cv=none; d=zohomail.com; s=zohoarc; b=LSRHu9v+RaVR3FoqnkQMc8KOVKz55OkzUeq/Q63CLOLNQ8rqC1P5ql90hXpZHlXs4j27+t3XoNsWWygZiAVaA2T22OWqaKGPv8ZCNs2FxiQw1ocAuXxLgZqwOB5U0Kq+jhIcvkvJ35wGYMmWVqbxZZXU2fGtnYH7q1z2vDYfm8k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1738953513; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id; bh=WhGYl7W5lek6CUNdtQQ5Pa2k2OpDJeIcEcmmpvwAsSo=; b=GpYp/cjZRCPVGIBZMYNoctEY8+mTLtqjmygzQXgpYA0Q4SsniwElPD7IU+dshCvUPu7DGvYVRIrxGVne4tYvUKRCbsWx29LAiWM7ISZ8WbRf0obotTBAiNIvY12ygJuq15DRnMloeiF6j2l7TUuVny+aVIPJO8n1t2EVSLKz2+U= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1738953513471686.3300743169029; Fri, 7 Feb 2025 10:38:33 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id D4AD31785; Fri, 7 Feb 2025 13:38:32 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 8523D14E8; Fri, 7 Feb 2025 13:37:40 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 31F711422; Fri, 7 Feb 2025 13:37:37 -0500 (EST) Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 6FD4514AD for ; Fri, 7 Feb 2025 13:37:36 -0500 (EST) Received: by mail-wr1-f54.google.com with SMTP id ffacd0b85a97d-38daf09d37fso1684160f8f.1 for ; Fri, 07 Feb 2025 10:37:36 -0800 (PST) Received: from localhost (205-201-32-8.scinternet.net. [205.201.32.8]) by smtp.gmail.com with UTF8SMTPSA id 41be03b00d2f7-ad51af7a22dsm3375285a12.69.2025.02.07.10.37.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 10:37:34 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1738953455; x=1739558255; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=n2EhR0ZIuGbn/0HOBUBn7B/4ijOZ8jG0HSlUV53AXwk=; b=OlheYvMeaFKP3Xn376evpz7/0AKcnGU3StM+mLJX2H0V5iNIcH/2eqxbEXQY42coBS cMNV6QZRieoXyIMaESXWQZEuqH3fpOuuSOSdeA208roFhxR6O35D0OuWYB1DvGFVwDHb 5UmrsTz5J+PQ+tfUydbrEhmmsKO9fByG5OvCrunP4Kb7LJ3Lo0hxi/u55TcR5uYL/dO1 2BL029HnGbGZX17f/toitI7ARkqW9o9doRTbnhw8rqmwkSNz+x5unQC1Zpmndt5S2cgd 4IEh25avGg+7Ijgm0FgKAkWKOdwWUgj0oc6YoxjdZXLOV8YnELM+1MZOBr4OR0eoqTpq GIYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738953455; x=1739558255; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=n2EhR0ZIuGbn/0HOBUBn7B/4ijOZ8jG0HSlUV53AXwk=; b=ZnfnfRJkLK5y/c/ik8AdfMojjmt+AA83pZ2fQN8XtNdk/dWsha7AjYe/wHMqZI5tyY gm5IQsTX5x1OP4wQilgrt68cclxy3TttM5p3UqAHmj60o9K6HcmepUESV3yl0I69mXFw O1+Y0iZvd0aUoWTLJKObJHwirWNrm5FdJmxTnxDDl8DLN9IbRg8+jTWBFshVgVXdKmge p+1tvEn24I/s9bKzBkQPMJUoFMb5TagL0uvSF3lr0DDmWh8uvptkGyOUQKdF4TEw1t6F AHsgOMaEV4namGzFbYZC1eyqQiaMgnUR/NOzSqOQPp81YYP/2dM1O3sDEGDaPHaq+pwa Qo7Q== X-Gm-Message-State: AOJu0YwyZOnGl1tanYOxj6jeyqP1qWHR5Jy6VbiE8Ukp1CSRhQyLteMK gemxjp8jz1GNJFIc6FUER64+vefZGxHzSjtL9PXfEGri16nXKFOC8JL++7NYvpn7awHoPB0uqHy g X-Gm-Gg: ASbGncseidlVc4PgHcly7FHzSJvxWOEl/RUiW737c5hWtmRGD/6kDKZ1lMUexY55ESQ BbqR8/FfDxz+ak37Hwfz9yDUh2pfMQ44cn01Xg11sQ5fuFgOH0MuC9cFr1CUTYnmvhy9pTID0Yy cjgXXPA8NcKJUJwaHocxY3n2iAN+9PJ4LM17gSdYktNJFmzrISHlZ+v3fSWjG9HfmK3XontTHTf cp3HOks3VhYCGc6fW7Bq0NCFEwbZxt5N+a904gVwd8i0XDCHgdTvt6QMl8vwf0mvk9qMtT+zKLc ELg2DVxR4vNyBL4t4fLeycXduQXIDxQPjA== X-Google-Smtp-Source: AGHT+IHQUDpxXTlCTDWOKcTzT3Hllqp1Vb1+i2bjMtpBGoQdANAeKpdH1k0bz+0NDs8YZNOWc+sqsw== X-Received: by 2002:a5d:6d0d:0:b0:385:fa3d:1988 with SMTP id ffacd0b85a97d-38dc8da6410mr2939528f8f.8.1738953455326; Fri, 07 Feb 2025 10:37:35 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V3 01/19] lib: virDomain{Save,Restore}Params: Ensure absolute path Date: Fri, 7 Feb 2025 11:27:12 -0700 Message-ID: <20250207183730.21686-2-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250207183730.21686-1-jfehlig@suse.com> References: <20250207183730.21686-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: NUIQV642WTZSRQYCIVIB76SM7YKOBOTG X-Message-ID-Hash: NUIQV642WTZSRQYCIVIB76SM7YKOBOTG X-MailFrom: jfehlig@suse.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: farosas@suse.de X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Jim Fehlig via Devel Reply-To: Jim Fehlig X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1738953515867019000 Content-Type: text/plain; charset="utf-8" When invoking virDomainSaveParams with a relative path, the image is saved to the daemon's CWD. Similarly, when providing virDomainRestoreParams with a relative path, it attempts to restore from the daemon's CWD. In most configurations, the daemon's CWD is set to '/'. Ensure a relative path is converted to absolute before invoking the driver domain{Save,Restore}Params functions. Signed-off-by: Jim Fehlig --- src/libvirt-domain.c | 89 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 73 insertions(+), 16 deletions(-) diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c index 072cc32255..cf68b0520b 100644 --- a/src/libvirt-domain.c +++ b/src/libvirt-domain.c @@ -1020,6 +1020,11 @@ virDomainSaveParams(virDomainPtr domain, unsigned int flags) { virConnectPtr conn; + virTypedParameterPtr params_copy =3D NULL; + int nparams_copy =3D 0; + const char *to =3D NULL; + g_autofree char *absolute_to =3D NULL; + int ret =3D -1; =20 VIR_DOMAIN_DEBUG(domain, "params=3D%p, nparams=3D%d, flags=3D0x%x", params, nparams, flags); @@ -1030,23 +1035,46 @@ virDomainSaveParams(virDomainPtr domain, virCheckDomainReturn(domain, -1); conn =3D domain->conn; =20 - virCheckReadOnlyGoto(conn->flags, error); + virCheckReadOnlyGoto(conn->flags, done); =20 VIR_EXCLUSIVE_FLAGS_GOTO(VIR_DOMAIN_SAVE_RUNNING, VIR_DOMAIN_SAVE_PAUSED, - error); + done); + + /* We must absolutize the file path as the save is done out of process= */ + virTypedParamsCopy(¶ms_copy, params, nparams); + nparams_copy =3D nparams; + if (virTypedParamsGetString(params_copy, nparams_copy, + VIR_DOMAIN_SAVE_PARAM_FILE, &to) < 0) + goto done; + + if (to) { + if (!(absolute_to =3D g_canonicalize_filename(to, NULL))) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("could not build absolute output file path")); + goto done; + } + + if (virTypedParamsReplaceString(¶ms_copy, &nparams_copy, + VIR_DOMAIN_SAVE_PARAM_FILE, + absolute_to) < 0) + goto done; + } =20 if (conn->driver->domainSaveParams) { - if (conn->driver->domainSaveParams(domain, params, nparams, flags)= < 0) - goto error; - return 0; + if (conn->driver->domainSaveParams(domain, params_copy, nparams_co= py, flags) < 0) + goto done; + ret =3D 0; + } else { + virReportUnsupportedError(); } =20 - virReportUnsupportedError(); + done: + if (ret < 0) + virDispatchError(domain->conn); + virTypedParamsFree(params_copy, nparams_copy); =20 - error: - virDispatchError(domain->conn); - return -1; + return ret; } =20 =20 @@ -1203,6 +1231,12 @@ virDomainRestoreParams(virConnectPtr conn, virTypedParameterPtr params, int nparams, unsigned int flags) { + virTypedParameterPtr params_copy =3D NULL; + int nparams_copy =3D 0; + const char *from =3D NULL; + g_autofree char *absolute_from =3D NULL; + int ret =3D -1; + VIR_DEBUG("conn=3D%p, params=3D%p, nparams=3D%d, flags=3D0x%x", conn, params, nparams, flags); VIR_TYPED_PARAMS_DEBUG(params, nparams); @@ -1210,23 +1244,46 @@ virDomainRestoreParams(virConnectPtr conn, virResetLastError(); =20 virCheckConnectReturn(conn, -1); - virCheckReadOnlyGoto(conn->flags, error); + virCheckReadOnlyGoto(conn->flags, done); =20 VIR_EXCLUSIVE_FLAGS_GOTO(VIR_DOMAIN_SAVE_RUNNING, VIR_DOMAIN_SAVE_PAUSED, - error); + done); =20 if (conn->driver->domainRestoreParams) { + /* We must absolutize the file path as the save is done out of pro= cess */ + virTypedParamsCopy(¶ms_copy, params, nparams); + nparams_copy =3D nparams; + if (virTypedParamsGetString(params_copy, nparams_copy, + VIR_DOMAIN_SAVE_PARAM_FILE, &from) < 0) + goto done; + + if (from) { + if (!(absolute_from =3D g_canonicalize_filename(from, NULL))) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("could not build absolute output file pat= h")); + goto done; + } + + if (virTypedParamsReplaceString(¶ms_copy, &nparams_copy, + VIR_DOMAIN_SAVE_PARAM_FILE, + absolute_from) < 0) + goto done; + } + if (conn->driver->domainRestoreParams(conn, params, nparams, flags= ) < 0) - goto error; - return 0; + goto done; + ret =3D 0; } =20 virReportUnsupportedError(); =20 - error: - virDispatchError(conn); - return -1; + done: + if (ret < 0) + virDispatchError(conn); + virTypedParamsFree(params_copy, nparams_copy); + + return ret; } =20 =20 --=20 2.43.0 From nobody Fri Dec 19 18:47:07 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1738953540; cv=none; d=zohomail.com; s=zohoarc; b=bt++KG2/cIacsYqZOS8a6n32Zx/ltLGkW1RJF7HULVAVdWpjtlA72aU460aNF+t0vZOtJVFSZgoqNvgYzupSU/RYF/+Dkd3s4t6s63F+srdh9MsfrcnwDl3xcG/2nZp6IFs7V0KlY9vSZX488l5Am0PUiEzwQvPnjKuF6UfaMrs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1738953540; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id; bh=iMubqa3hV1lCxkHXfC7Zc6Oac1l+6t+wIgkh7v5aPhU=; b=BNQu4iO+SRQ7gFkCXCuBiGS5tI8wISd7MEUxM2VcF8sUSz8w/aXdcYqVFm5FTNG9yP1xvkojpCBWS4NCPGVPesgKrLBrFu3uqIO+jEY+nPyoxFGLV2V/LL4Cg4A4WVEcFMClQseThtYgrvKoIqZoRbVBERXIymT/JmNmJ1GRXlg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1738953540425874.6174767755738; Fri, 7 Feb 2025 10:39:00 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 657F514E4; Fri, 7 Feb 2025 13:38:59 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 4D00215CC; Fri, 7 Feb 2025 13:37:51 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 248B81577; Fri, 7 Feb 2025 13:37:47 -0500 (EST) Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id BB1F61567 for ; Fri, 7 Feb 2025 13:37:38 -0500 (EST) Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-38dcac27bcbso637284f8f.0 for ; Fri, 07 Feb 2025 10:37:38 -0800 (PST) Received: from localhost (205-201-32-8.scinternet.net. [205.201.32.8]) by smtp.gmail.com with UTF8SMTPSA id d2e1a72fcca58-73048bf13d7sm3406892b3a.99.2025.02.07.10.37.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 10:37:37 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1738953457; x=1739558257; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=cdQWvdl+Oh9/fYMS2A6hXXLmXZqsjA6zgZFWPKVe0Y4=; b=MzJSJmi1UzwFIKi29jELk8fZgdeNOKwJ/llYBHnlY6GgePud7rUhm31GbLtF7CbvS7 QkucdNLaZtRGWPSlKQoUl4VaCpx3/Qw0UXSOYEPeQRZGDt+QlNMxlABjvrvuNL07Hb6M WwdplS4aShUQ2jztiDpZbulvl09TPVka8e1PYd/caYtphXyy23EZbcDJJsJJBreboAA3 3145ld2Cj8mSCxrWn6MP+1LbVEq/NDrxapG1TjvsDWUa0UHCtcYNG1mmWriukaAzReKs bKsaVuJSM8V6bIQv58jJYSvv3QJ9VohDx6OxOC+IVAzhBqPysRVmUfmyz01jMPG4Twaj O0eg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738953457; x=1739558257; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=cdQWvdl+Oh9/fYMS2A6hXXLmXZqsjA6zgZFWPKVe0Y4=; b=RVWye+sGAN8cMVyjVXfoOKp8EsnK2l2BoTJJLRhta+83VChr1FBLo1TfJEMfsJeOyw MYYuTRDgYiGIMqZBfel/h1QCKLAh7M/xuYIhERo3DQrIRnHQ/FUBQKle27yzAVZfGNYd qJ19E0F1KWjnwtLIxIL5UhLnTOodiTVxlX2mm4/7tTgHJL/6MtHfa1Dve/2vLgMJvy3w U3aZZqQd/ZJqs2rh+tCEssOUg6myZmJZFUN/4ysZJ4HSZknvS5K6gR4KJkJJJwKG5tf2 Ijsnw9/Y1UxNgtNFM3dKKsYYharer1fEbn7BIz1CD0d5Yrp7DBsiriPHJDXl4oexYJQS bz2Q== X-Gm-Message-State: AOJu0YwlcwSIT9K1M3mN8EEauNx9jtDjQJ1XrBbTS/nB30JwXxBXmWZi tjAayZWJRuGjFvpbbalCk7JgD2etKUpBFHjmd77xa36XLjK2wuyPMeOFbC/GyXPV7rIccNPqyNt 9 X-Gm-Gg: ASbGnctzVIlDblgWIgfLzuAn9m+tpP7wf9A1vyaSP5/kGYtzTAAwSqD2NOT/3Qmfqrb pjwCTczBVkUQGPsY9tt1hK7zxjNQu6sXi+VrHINxTMZwoGZwM7WHxuNYaJUC+sP6TokuIpfiLF3 zdUaPt7xdmbXiD6yIMVTcThVkLVoJ7UErUAI1w80pv9ag7Zer0bZ8WRYmoPH+sSy1KWb2XCAq8x 1xYp/Qjh64rmwkQ2+uAzwMBNJ99oeQ8b4vOPTz+UB5LBOiJqHccsO/ZuVulA7yxTKLzZ0+wm1Tn t8fHHPJqLDuIYSEyMkXdFuN1F6WZmi6uoA== X-Google-Smtp-Source: AGHT+IGSeb5VsQLCYDQxVS0jPv508a62j4C5fpm1sllke2mUPpQ8UzjQTGn83uCPoCmNggbcQaA9JQ== X-Received: by 2002:a5d:6da9:0:b0:38b:ee01:ae2 with SMTP id ffacd0b85a97d-38dbb233181mr6224304f8f.10.1738953457490; Fri, 07 Feb 2025 10:37:37 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V3 02/19] qemu: Add function to get FDPass object from monitor Date: Fri, 7 Feb 2025 11:27:13 -0700 Message-ID: <20250207183730.21686-3-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250207183730.21686-1-jfehlig@suse.com> References: <20250207183730.21686-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: VF5JEVTPVV266VENVQSIQZ7HWZCAEYWQ X-Message-ID-Hash: VF5JEVTPVV266VENVQSIQZ7HWZCAEYWQ X-MailFrom: jfehlig@suse.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: farosas@suse.de X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Jim Fehlig via Devel Reply-To: Jim Fehlig X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1738953542611019100 Content-Type: text/plain; charset="utf-8" Add new function qemuFDPassNewFromMonitor to get an fdset previously passed to qemu, based on the 'prefix' provided when the qemuFDPass object was initially created. Signed-off-by: Jim Fehlig --- src/qemu/qemu_fd.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ src/qemu/qemu_fd.h | 4 ++++ 2 files changed, 50 insertions(+) diff --git a/src/qemu/qemu_fd.c b/src/qemu/qemu_fd.c index e847056573..333f9b128e 100644 --- a/src/qemu/qemu_fd.c +++ b/src/qemu/qemu_fd.c @@ -115,6 +115,52 @@ qemuFDPassNewPassed(unsigned int fdSetID) } =20 =20 +/** + * qemuFDPassNewFromMonitor: + * @prefix: Prefix of an FDset which was already passed to qemu + * @mon: monitor object + * + * Query the monitor for already passed FDsets and return a new qemuFDPass + * object if one is found to contain an fd with associated @prefix. Returns + * NULL on failure or if no matching FDset is found. Similar to + * qemuFDPassNewPassed, this is useful along with qemuFDPassTransferMonito= rRollback + * when only knowing the qemuFDPass prefix. + */ +qemuFDPass * +qemuFDPassNewFromMonitor(const char *prefix, qemuMonitor *mon) +{ + g_autoptr(qemuMonitorFdsets) fdsets =3D NULL; + qemuFDPass *fdpass =3D NULL; + size_t i; + + VIR_DEBUG("prefix =3D %s", prefix); + + if (qemuMonitorQueryFdsets(mon, &fdsets) < 0) + return NULL; + + for (i =3D 0; i < fdsets->nfdsets; i++) { + qemuMonitorFdsetInfo fdset =3D fdsets->fdsets[i]; + size_t j; + + for (j =3D 0; j < fdset.nfds; j++) { + qemuMonitorFdsetFdInfo fdinfo =3D fdset.fds[j]; + + VIR_DEBUG("fdinfo opaque =3D %s", fdinfo.opaque); + if (STRPREFIX(prefix, fdinfo.opaque)) { + fdpass =3D g_new0(qemuFDPass, 1); + + fdpass->fdSetID =3D fdset.id; + fdpass->prefix =3D g_strdup(prefix); + fdpass->path =3D g_strdup_printf("/dev/fdset/%u", fdset.id= ); + fdpass->passed =3D true; + } + } + } + + return fdpass; +} + + /** * qemuFDPassIsPassed: * @fdpass: The fd passing helper struct diff --git a/src/qemu/qemu_fd.h b/src/qemu/qemu_fd.h index cd0ff2c690..d873e110a8 100644 --- a/src/qemu/qemu_fd.h +++ b/src/qemu/qemu_fd.h @@ -34,6 +34,10 @@ qemuFDPassNew(const char *prefix, qemuFDPass * qemuFDPassNewPassed(unsigned int fdSetID); =20 +qemuFDPass * +qemuFDPassNewFromMonitor(const char *prefix, qemuMonitor *mon) + ATTRIBUTE_NONNULL(1); + bool qemuFDPassIsPassed(qemuFDPass *fdpass, unsigned *id); --=20 2.43.0 From nobody Fri Dec 19 18:47:07 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1738953562; cv=none; d=zohomail.com; s=zohoarc; b=eHolmqwitsZ7m/3t83n46UlIb0iOHB1qWPUb0GggFwfSZLJ7CfdMQgihv3qr13+vpkPVuTO3UavEw2K045YnnPMLlPzZiKcBZB3uw9cJSuKghdv/eCpYLuKDh2bEdwKp+vaqpyviF+f+Vph3Ry9wuUKhsaFqv8WMVO3V9ltFdfc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1738953562; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id; bh=byWO8oBFnLOF7HvzoUDr7GEC9mg/JEK6X217Vt1uBnE=; b=PpVk/PQNdCK3BAzu/qKJkyp/hLDDXrV0Z+Mv2iL8ct+7QITpGNfe6WxVfpD1H3rxiSBjK8BWKbOyjKcsrIxKvHcEQ8xa563JlRPX4OMHX7E2pQAW5RTjiBF2C+H1NvrGy8FwiGCRgZ1XAxzt093hFb0+c8Zj7iCKU9YnlVLQLIE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1738953562348952.0607574712052; Fri, 7 Feb 2025 10:39:22 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id B267B150B; Fri, 7 Feb 2025 13:39:21 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id F2957161A; Fri, 7 Feb 2025 13:37:59 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 5BF291518; Fri, 7 Feb 2025 13:37:55 -0500 (EST) Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id D7EB4153A for ; Fri, 7 Feb 2025 13:37:40 -0500 (EST) Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-38dd0dc21b2so213348f8f.2 for ; Fri, 07 Feb 2025 10:37:40 -0800 (PST) Received: from localhost (205-201-32-8.scinternet.net. [205.201.32.8]) by smtp.gmail.com with UTF8SMTPSA id d2e1a72fcca58-73048bf13ccsm3384859b3a.95.2025.02.07.10.37.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 10:37:39 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1738953459; x=1739558259; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=d+Nn/53QOkZY3f3W1SBui6U9knc1HfLHUCk2N/7s/a0=; b=ByghaKYE/BZkZqn07nOqPMdnnsYMlnPaO/ZvlZ3sFSGZ3q/drRH521HdNnD/mxkHBr ls8UGb4wIOK5gr5K57FhV7JBWf7Wd7yqIlw3HQcaYN9dWsJQ4Ajp2SAN8Mg2LRQ1TEjY o/WKHpC6mq7q9B+6Ep+Kg44qx0JMZweMtZfVtg8wmvL+Su1GPeoBjiaIoYkzyJ8VuKXe q/ZkTHKa7MQZ1BVlFm6BEZeuUHzgo4eOaI+GrxGeuMI2oJI8XBuMEKgMUOwD3pfEhBwp X+ljNmswkDGZLnCHj9W873CSScHkwupbG2d+eT8wdNnvJFkkFKofABfJreR5dzYK4cy5 FnOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738953459; x=1739558259; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=d+Nn/53QOkZY3f3W1SBui6U9knc1HfLHUCk2N/7s/a0=; b=eyWvBjkzDdHqjB5LrZfrL0MGso4RN5gccHTVX1jkZhc2pfiZ8M/6ViY46rtfdWcTRs 65f77id3vp0fo55cTvuT+gawllnS61vThjs8DI2HjsCszT3jZCIwDW2gTtr4Kent/wu9 lKH18uWLJ4MkeryUZbiKaQoSph4xGns7OzuqVbYCFja/WHTmROIegT15GfRgCcbi7T0l iZwCrvySlHd/UJ79cL33/F38KXEnjB8jCy/yoiMLhVOUGk51QGflQxvpIjJvOOEAdEyZ 3WvX6oZB4yWJ05eFsOd7YPzil+ASxkD5t5HJwNjqRKCNJwBHzD2RXEj5gdXlZoa8IzJT YSWw== X-Gm-Message-State: AOJu0YyxPYjyhLTHgdcE5A2vrHgDcl9ojGpmETwsJi/HuBtx2CkYk59Z m2I4mYwy0QnpSi6JGwy8xHKMZa0uSXUWrx1aFQ1uclV4RWV9xVEGRzkhP00jeMwT9wze2AqywNS x X-Gm-Gg: ASbGncv3fheO+vXeo/jkQcWvuRHD2sFjk0QP377gO5iEK6MAGTXCmvjyyyS1IKOf77n mqPnhBYN5v+GCpvAa0ja9fzx9CPSCOyK8N8Jebk/SSzWm3tX3rsSIcEbABMT/SZMXHj5yO4G8zV JTB1JZl6Kdly72nprzMva51AP+styojFCrgPw3CoOe6RHxzl4qUqo5O4hbywOHpPVA7L3lZvoPg oh54l3wgQ5r9d6ZkhA74h93XkHqeqyM/X6I2kOe+WrvNXqKAtxXqmscPgiRj2lWY/5tzFUUnfzF GCC9xRAn09zDWX7dVkCC4PbL4Nu+WcPpkg== X-Google-Smtp-Source: AGHT+IFBxnVDt2Ol07ceG6pepoZaftDEDFNNd1/SsutL14GIPQtgsart8mF4gNGsIBYRit3yimc53g== X-Received: by 2002:a5d:5989:0:b0:385:f4db:e33b with SMTP id ffacd0b85a97d-38dc8dddd2amr3887064f8f.21.1738953459612; Fri, 07 Feb 2025 10:37:39 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V3 03/19] qemu: Add function to check capability in migration params Date: Fri, 7 Feb 2025 11:27:14 -0700 Message-ID: <20250207183730.21686-4-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250207183730.21686-1-jfehlig@suse.com> References: <20250207183730.21686-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 37ALLNQ255I5CPBXSXDWJIGTOSILTNZI X-Message-ID-Hash: 37ALLNQ255I5CPBXSXDWJIGTOSILTNZI X-MailFrom: jfehlig@suse.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: farosas@suse.de X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Jim Fehlig via Devel Reply-To: Jim Fehlig X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1738953563778019000 Content-Type: text/plain; charset="utf-8" Add new function qemuMigrationParamsCapEnabled() to check if a capability is set in the caller-provided migration parameters. Signed-off-by: Jim Fehlig Reviewed-by: Daniel P. Berrang=C3=A9 --- src/qemu/qemu_migration_params.c | 16 ++++++++++++++++ src/qemu/qemu_migration_params.h | 4 ++++ 2 files changed, 20 insertions(+) diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index c10660d6f2..252437e5b2 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -1312,6 +1312,22 @@ qemuMigrationParamsGetULL(qemuMigrationParams *migPa= rams, } =20 =20 +/** + * Returns true if @cap is enabled in @migParams, false otherwise. + */ +bool +qemuMigrationParamsCapEnabled(qemuMigrationParams *migParams, + qemuMigrationCapability cap) +{ + bool enabled =3D false; + + if (migParams) + ignore_value(virBitmapGetBit(migParams->caps, cap, &enabled)); + + return enabled; +} + + /** * qemuMigrationParamsCheck: * diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index 17fc63f527..da62ca5b8f 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -137,6 +137,10 @@ qemuMigrationParamsGetULL(qemuMigrationParams *migPara= ms, qemuMigrationParam param, unsigned long long *value); =20 +bool +qemuMigrationParamsCapEnabled(qemuMigrationParams *migParams, + qemuMigrationCapability cap); + void qemuMigrationParamsSetBlockDirtyBitmapMapping(qemuMigrationParams *migPara= ms, virJSONValue **params); --=20 2.43.0 From nobody Fri Dec 19 18:47:07 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1738953580; cv=none; d=zohomail.com; s=zohoarc; b=jFJbYj6Jk2NPZO1ln8QIPaM/Q4ZKqKoSn3bUv5CbPt5FEsP0rveJauhFUTqL51Rdz9K0t43/hopr/lOe82I7h2WqmJC4/L/ZEJoZQuNzBUGoVRP/tkxVy9ASF7U7Y1b07VaY/HNGuK0wJ7Qae/WFf9whbsxFGLKxrSYdJGfKz8w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1738953580; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id; bh=hgZCkQ/FIYFNqZ/wXoRZeAxyF1kii0uyORj1i5Zo3+g=; b=cUsGlxMrcqy8vJIVNJSD29dih7L4VLqORh/KtioySFZ29Uyt8e8H3juI+9hhKXvlhZHSyxgVWxwp/i+MG97c24BYTRqQdlTraNuS73xEQRwhYE8hDqzygE09FT85dJJoc/PHap6w0V3jlchMZxX69gu5VAVv8D9hsbClm3Y98OQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1738953580743711.9597418398048; Fri, 7 Feb 2025 10:39:40 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 20DAB153A; Fri, 7 Feb 2025 13:39:41 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 3D3E21576; Fri, 7 Feb 2025 13:38:03 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 09272159C; Fri, 7 Feb 2025 13:37:56 -0500 (EST) Received: from mail-wr1-f45.google.com (mail-wr1-f45.google.com [209.85.221.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 04E0B159C for ; Fri, 7 Feb 2025 13:37:42 -0500 (EST) Received: by mail-wr1-f45.google.com with SMTP id ffacd0b85a97d-38a8b17d7a7so1142699f8f.2 for ; Fri, 07 Feb 2025 10:37:42 -0800 (PST) Received: from localhost (205-201-32-8.scinternet.net. [205.201.32.8]) by smtp.gmail.com with UTF8SMTPSA id d9443c01a7336-21f3650cde8sm34234255ad.45.2025.02.07.10.37.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 10:37:41 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1738953462; x=1739558262; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=HUVXnUtwHVZ4OhdLJUfrcpq43Zx1mCS3Qo12iEIX/eU=; b=dsVVMdJOeQX1JFEUJ1WyjhbPx4AK7KiNK4e2wlOOgAJ60SjAK6WTvc0csHV3t+A0mi e7aLZwyxQusNU5O80MoyiKeCVVL2GlzvYZOiyKRrkjzvoaoRSQCuzMvrr4AG8q20ZlSv iA4QqGvL0akro9mER1oCuovJb0AsyRGgatfLiKKP94hPG/Qe5xekVjup/h0zxgkL1tSC KXrTqpx5g7D2h1z+t5KcLhqAVi8tr1WZOeIYFXFcwzmF3+2IQK4tjhFf9SnQxDyOtQR+ FGy1rJd9UfDStv2G2LkekCAcTQptrXpZv1tVkCAWuxDuQsivNetxQHbzC0cyIaoXtku2 Be5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738953462; x=1739558262; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=HUVXnUtwHVZ4OhdLJUfrcpq43Zx1mCS3Qo12iEIX/eU=; b=lIQybHVi0nqBKL1kKzj5ZJtHtxCqO5CAuM3fnw1rLAcXD7BbVW+6vrzGhupZRRItbf DEb4Y2x1N08Cv3+MT8VhDafR3vj9xtYxLsXImh7roqcwTRG1ID5poDQ8URld0LFt1Uvm NbOVRIIWSQxXVeHq0F4cKo7zulSHZj3hGFYvJ97uZrjEBB/KwGP9iV0eGjq0J4j7AoO/ 5XmvoXNIXZX0V+UlX/ffCxmhruULaojkYIRrzRXKyJHCeKn2V9ZfWy0PvodpR91brV1A a0UrIsg5dHQmUgFTeaqkeeh6ZScoBsk6Jz0NEM4kieDdLxosH8kW4ylm6jfYYxBS4xt2 3vFA== X-Gm-Message-State: AOJu0YyDu1wnCJ4PcMRTx+Abp/VQU8J/C6GyxeMHvnVjxcIt+7Ou5qOU HGPMdfrOf/4jfOirS784VWo8r+n5eA7CTs/q08Qf3S2aYVv3UVEP6KmUAYD8SBea6kgFdgpLpc4 Z X-Gm-Gg: ASbGncskJK7UXAZVVKD63qWLh0JdyNElW2b72gKrfJmyoI1uWF2y/9MltrXjGPJKtpe pmtndIUICcMGwefeUycTFoyg8FeWwyihn573+l5Xj9rVr6C0CdKZ4itKz+Ljwhxmoudpoc3T3dZ c6wEOqAcyPPltP+VYO0rwLOaNSDILrPRvGvWI3yzvhycuewESgGBcw+C886JnqUzctcNBfr2Fu4 Xg5EsKp+dUgwaY8wgX1olJ3LdQ1XPdRwCCmSr5ou96Vo2lV5BOqehkzYc+p5CrcoUo9yS8u8Ydk 2gq1RVKD6Nx6CcI3RDG0bTO8ux/MldjxQQ== X-Google-Smtp-Source: AGHT+IEvV7qEyc79CmaoatT8n2DsrWn6P1/4Jo/wxzcCWaKsdqYiA+Wl8Xq6fpHfuMlmdfckC8d/mQ== X-Received: by 2002:a05:6000:1865:b0:38c:2745:2dfd with SMTP id ffacd0b85a97d-38dc9348314mr3195184f8f.42.1738953461816; Fri, 07 Feb 2025 10:37:41 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V3 04/19] qemu: Add function to get bool value from migration params Date: Fri, 7 Feb 2025 11:27:15 -0700 Message-ID: <20250207183730.21686-5-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250207183730.21686-1-jfehlig@suse.com> References: <20250207183730.21686-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: HHTEY27IOSJQMNWELH6C2AYOUHRDURQX X-Message-ID-Hash: HHTEY27IOSJQMNWELH6C2AYOUHRDURQX X-MailFrom: jfehlig@suse.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: farosas@suse.de X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Jim Fehlig via Devel Reply-To: Jim Fehlig X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1738953581858019000 Content-Type: text/plain; charset="utf-8" Signed-off-by: Jim Fehlig Reviewed-by: Daniel P. Berrang=C3=A9 --- src/qemu/qemu_migration_params.c | 18 ++++++++++++++++++ src/qemu/qemu_migration_params.h | 5 +++++ 2 files changed, 23 insertions(+) diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 252437e5b2..939d9f01e4 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -1312,6 +1312,24 @@ qemuMigrationParamsGetULL(qemuMigrationParams *migPa= rams, } =20 =20 +int +qemuMigrationParamsGetBool(qemuMigrationParams *migParams, + qemuMigrationParam param, + bool *value) +{ + if (!migParams || !value) + return 0; + + if (qemuMigrationParamsCheckType(param, QEMU_MIGRATION_PARAM_TYPE_BOOL= ) < 0) + return -1; + + *value =3D migParams->params[param].set ? + migParams->params[param].value.b : false; + + return 0; +} + + /** * Returns true if @cap is enabled in @migParams, false otherwise. */ diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index da62ca5b8f..fb2cfd9fad 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -137,6 +137,11 @@ qemuMigrationParamsGetULL(qemuMigrationParams *migPara= ms, qemuMigrationParam param, unsigned long long *value); =20 +int +qemuMigrationParamsGetBool(qemuMigrationParams *migParams, + qemuMigrationParam param, + bool *value); + bool qemuMigrationParamsCapEnabled(qemuMigrationParams *migParams, qemuMigrationCapability cap); --=20 2.43.0 From nobody Fri Dec 19 18:47:07 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1738953608; cv=none; d=zohomail.com; s=zohoarc; b=UN5zhLUMzblk2LpvlYHmNzOZRCEKy9vKAcmN8Gj24BjFRFnUILIdqI6c+/ikISaDvCG1jZRY+euD5gbHm0M/6kg/LQanv5MGM6jSOfVeCdduXGBfgawtnzJE2mF8ja2AWDDx6j3GyFRNCRvpjdzfkxU84N+0dy3JaHAmTc2FYNY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1738953608; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id; bh=osddx4XsZNZZAY8W8U6bK8T6RQGZDNR9UyybX35ipUk=; b=OVy9Or2+IYfGAN6HP9DO83nsdqqxLwza4ZCGN508lJySmDAQPfisAQo/RIf5WaomojH6Oivh448OmppSA0LG+Pb2bBq0aXwfkblPNZLG/YlJDTLKfvEmxDWF7Mfsdbulq0kjKUV99XZP02avfRAOxGHBXbHy31cfnQZGq1Q+3tg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1738953608448157.74197966613258; Fri, 7 Feb 2025 10:40:08 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 79E841397; Fri, 7 Feb 2025 13:40:07 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 8A64B16F1; Fri, 7 Feb 2025 13:38:04 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 6D5C51581; Fri, 7 Feb 2025 13:37:58 -0500 (EST) Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 2DB8314F9 for ; Fri, 7 Feb 2025 13:37:45 -0500 (EST) Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-4361f796586so29098445e9.3 for ; Fri, 07 Feb 2025 10:37:45 -0800 (PST) Received: from localhost (205-201-32-8.scinternet.net. [205.201.32.8]) by smtp.gmail.com with UTF8SMTPSA id d9443c01a7336-21f3687cabcsm34267865ad.200.2025.02.07.10.37.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 10:37:43 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1738953464; x=1739558264; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=jjphJ6QLmhC94epX3i+EnkGIEFXSHw1r/Po6kthdPd0=; b=fKWPuPqIzTMT201tAo+9Ca5gGhFQ4s2xn3PpTiilAxbYtorHQI1xKbK/0IgmoR/rc0 xncX6VYIGnBK+wDLapQk2zX1XpIMrqRK0a0wYO0VJGF6eHTsRrQKvbNTAo3ZeOyq6un6 2SeAZDDPNVQgJxNnWnWN+yWQ2/tiU8d0OSh/xRVboObZI/UwMXcEhutuMroetmRQevo+ HJkFENy+dLWDMarIWzEk4+CnSGIs7F6/pvjujGRcW8F1sRfbOuDZBj1Eof9wfZp8XSJ5 TBZJB8tOgo8H83yv/yuVx/zYtB7mUUnu38Ugr5HLrg+i8jTprobh93iwGJ0wHDRQ7kQB 28bA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738953464; x=1739558264; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jjphJ6QLmhC94epX3i+EnkGIEFXSHw1r/Po6kthdPd0=; b=iK5QiasMYjuCJo3ghKjBpOqHULKcpmoy/Br2lINOEjNmR33pHdWpLnwtQYgGHIhAfE HZbTz/MbfBkCOGqmftdGA6dvHAx3cp6SD/B+Puo6wP0+qBiijdCrIfhdTouD8D3iBn31 Q36NJ7FNgVwF40ey4uSMUbyQrO1J/n9l4B2LlzIxrcU4Ixe4AjIug9tP3I/GV7DVpYla OqBKqZkBlmiZ9GZaqajbeEA9vY6Q5EvnyyHAC9BogGpJSqFG6djKucSE1v2Cdf0hClSy tJFKeXXOcCvvUDDitdBX0eXSiBdG0sdCBn2+BiLnGNUgJoK6c7pAOMh49UnNjkecfo9p XGEQ== X-Gm-Message-State: AOJu0Yx7DR0oOUpO2k+XYA5QBH1OdlbpS6VeNyI3kQA5SGF2hfZq+Y0M FqBJ98p4DuN7uo4buRagNUF/3X88YY3B+fm4dhwHvcAyqoNVqoL1qEFV5DhjFwjpwmoSUw75LbK s X-Gm-Gg: ASbGnctcDZz9eiJQ79Lz+XlNkC4UdtdVVhM0qDfw2AbeC/WUKoapuZskMG+1T/Wvx/l 78R4wrwm825lfYUl6J5v/rh7/xeTw+i/OIQkXXbGfK81f3OTHtH/mpFbDRrmPgikVwXShlWwc1D 6y4kCfw3omPcjCVs9Y4dWEAVTQc3feFj65S1ClBQAEdebuyc52R7U8NlMUcEGOhs7GbeWKwdM2x noSnc2TbJ+uRTyXn9kLg+35Im57DSAWr3EPPQ6sJkJU6z/wgdb9rLPt9b5gXbTwtO9nuf7846x2 MhIricrcn/92pc8kGZGYWG5qk7NozNV8Iw== X-Google-Smtp-Source: AGHT+IFipPHCzNeNP0Ul91M58rbfVMEdq15EaoyH0BETiLN9hN4DgSaKj1RBs4AY7sRZIjqn/JE8HQ== X-Received: by 2002:a05:6000:1acf:b0:38a:9c1b:df5b with SMTP id ffacd0b85a97d-38dc90f1ea8mr3732237f8f.30.1738953464043; Fri, 07 Feb 2025 10:37:44 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V3 05/19] qemu: Add mapped-ram migration capability Date: Fri, 7 Feb 2025 11:27:16 -0700 Message-ID: <20250207183730.21686-6-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250207183730.21686-1-jfehlig@suse.com> References: <20250207183730.21686-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 2IK2E5TQGKZ2Q7PCRXL32EGLMNEMEZM7 X-Message-ID-Hash: 2IK2E5TQGKZ2Q7PCRXL32EGLMNEMEZM7 X-MailFrom: jfehlig@suse.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: farosas@suse.de X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Jim Fehlig via Devel Reply-To: Jim Fehlig X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1738953610848019100 Content-Type: text/plain; charset="utf-8" Add the mapped-ram migration capability introduced in QEMU 9.0. Reviewed-by: Daniel P. Berrang=C3=A9 Signed-off-by: Jim Fehlig --- src/qemu/qemu_migration_params.c | 1 + src/qemu/qemu_migration_params.h | 1 + 2 files changed, 2 insertions(+) diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 939d9f01e4..4fc9199f1c 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -106,6 +106,7 @@ VIR_ENUM_IMPL(qemuMigrationCapability, "zero-copy-send", "postcopy-preempt", "switchover-ack", + "mapped-ram", ); =20 =20 diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index fb2cfd9fad..2379950ce9 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -42,6 +42,7 @@ typedef enum { QEMU_MIGRATION_CAP_ZERO_COPY_SEND, QEMU_MIGRATION_CAP_POSTCOPY_PREEMPT, QEMU_MIGRATION_CAP_SWITCHOVER_ACK, + QEMU_MIGRATION_CAP_MAPPED_RAM, =20 QEMU_MIGRATION_CAP_LAST } qemuMigrationCapability; --=20 2.43.0 From nobody Fri Dec 19 18:47:07 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1738953630; cv=none; d=zohomail.com; s=zohoarc; b=k4bC9eKoH30hhIS0nZitMR+U48yAlZj59SxoQmetCEo4G/GoHa0oDoBtYVLSNhmOkpdInJrruVPnJQ+Nl4l4Jz9Jrb12ilh3ECT+z/AMm81XWIMpJ4wKXtOK90XheU9CMD/woeBOtfFCeDjj7RFWx1NKCRUcra8dm0/UW+OZpGk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1738953630; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id; bh=cu5LQJAwWWOsI/0VrXPUtUcjzIz/OFkRh75uw1/xMZc=; b=O9O/XYR/RL4jn2HqHyg0YSdycZsKKMIxTCZb3EpFfE/hblnj22RwHGmuIoISQROHqgjKNnhD7zroqVo4TtCLyteRyS6eH9bWy9TBhXVWobGjhYlLC3EUZ8qEVb0OMyoGXYHQfuMdNICRwJhauPuMqJ6LIfCL7HC5L92BgoSHBKc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1738953630184357.9582733962136; Fri, 7 Feb 2025 10:40:30 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 8F2C814F3; Fri, 7 Feb 2025 13:40:29 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 7D8A4157B; Fri, 7 Feb 2025 13:38:12 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id DF9AF16E7; Fri, 7 Feb 2025 13:38:07 -0500 (EST) Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 762B1154F for ; Fri, 7 Feb 2025 13:37:47 -0500 (EST) Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-43675b1155bso26080075e9.2 for ; Fri, 07 Feb 2025 10:37:47 -0800 (PST) Received: from localhost (205-201-32-8.scinternet.net. [205.201.32.8]) by smtp.gmail.com with UTF8SMTPSA id d9443c01a7336-21f3687edbesm33926975ad.177.2025.02.07.10.37.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 10:37:45 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1738953466; x=1739558266; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=DJcyg9tCxQl9yVB+VcCfEzMxGb4HyCojPz9WvnV8YEI=; b=efD4YATA8Ko6fUm30cN5qIXGBaxL2BZFhXmIgAYDr4wN4fsA+0NtCXzemasIhEDRIV mMIp4SYre03KpbHn0vUyIfx+ol6R14vwdRAVxJsugvAImgKQfBrzWcdpjbyILPO4cu11 CZ82zt1jgqBmFN0qpzEu+5EWDMIN06qLkAlRjmH8eK/hzEXBwEtmDMGqrXBLSVv1rEOU WztiXPFA6xiJWPvd2qIpIaPWYgh9BaUQNW38c4qEmUEvASlFFMDMSJXaJpTcL1VO0rBN SM+q688UKq8wrEn7csGJTXBRLxI0jO7tY5JwaI+/4fATUUJLDtDR03e5Qj4tGS14/pO/ Jhsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738953466; x=1739558266; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=DJcyg9tCxQl9yVB+VcCfEzMxGb4HyCojPz9WvnV8YEI=; b=l8PS965P3ofhv679qmLSM7ISSsFZxWMwsDSYSTP0iDS4u+h+XA83LlrceRoLoUw2Li kS9qysIi8M21gqkhZc+k4HCABTTbXuLWxwy1gL0gp/aKCz07rGFiCVyIFvat8fGrbGmJ gUmY4pUhv26/eJu/P8HEUseY9ywTQ41Q7N484KTlp7/+zbIuSdpvtGlumnGdPu4oSqHQ N0an1Plk6diYFg6u1fPTwl8i00VTWFR6kjNJGbwZQ9///IwHZ6U0MA1EAD3qeQbmjhTI d3bPwESQe3k7sbkeHQEM8eB6TpFBRlMqbCEAmi0rcC8T3O5GXeM3y5EFePiBjy95i+CD 4S9Q== X-Gm-Message-State: AOJu0YyRjdE5XycGVzWSfsBhyOBiyyYJO/8BacIk4WNXRgik4Mh7FweQ ZfMVcU6pLqMI/Uajbl5/nfxKowWaW1s80zxB3ctFt2HYnRhZQooBaFl9+mACFQL+muqIBYXdIXf q X-Gm-Gg: ASbGncvOzJFq8bFICjkTReK5Zs0ahJq0MlcodyR8MvNWf4PEV5wVeZCzA3Qf6N06IN5 wJcCWhQPy2PiCST9KVJ3fYp2ttXzoh+zTv++xnaFDQpLwn7lQSpsDMc4Zv0NZDkaaAKOikZgLFp JQI6FqNQTUMeiHWnT/ZZdn5dXdR7IegDHnPpHzGcmsuTgbe2ZA1WtwHYHbcZ/8KCUMy7MVebgf0 hPFEVMLxzduR4VfRlu+x7qs+7kAl78iIgqtZ8T+fJOSEWPr4+tKCwxcvGmUiEMeCWN890mgFU5l x7OJDtPO+23zDHropgWAETsK1HgL8OkXMQ== X-Google-Smtp-Source: AGHT+IFNLBOuGcolh8K+eLvaBKPm9SuXuXtinWrIiktMPva1TnAciHE4ARBTRP6i+HcVCFKLtPvBqQ== X-Received: by 2002:a05:6000:400f:b0:385:fc70:7f6 with SMTP id ffacd0b85a97d-38dc8d985c8mr2987158f8f.7.1738953466179; Fri, 07 Feb 2025 10:37:46 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V3 06/19] qemu: Add function to get migration params for save Date: Fri, 7 Feb 2025 11:27:17 -0700 Message-ID: <20250207183730.21686-7-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250207183730.21686-1-jfehlig@suse.com> References: <20250207183730.21686-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: XFGQWJ34J75HJFHIQZIGFT2FSPOT7IRQ X-Message-ID-Hash: XFGQWJ34J75HJFHIQZIGFT2FSPOT7IRQ X-MailFrom: jfehlig@suse.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: farosas@suse.de X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Jim Fehlig via Devel Reply-To: Jim Fehlig X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1738953632055019000 Content-Type: text/plain; charset="utf-8" Introduce qemuMigrationParamsForSave() to create a qemuMigrationParams object initialized with appropriate migration capabilities and parameters for a save operation. Note that mapped-ram capability also requires the multifd capability. For now, the number of multifd channels is set to 1. Future work to support parallel save/restore can set the number of channels to a user-specified value. Signed-off-by: Jim Fehlig Reviewed-by: Daniel P. Berrang=C3=A9 --- src/qemu/qemu_migration.c | 2 +- src/qemu/qemu_migration_params.c | 21 +++++++++++++++++++++ src/qemu/qemu_migration_params.h | 3 +++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 53bbbee629..4efc03fc00 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -7090,7 +7090,7 @@ qemuMigrationSrcToFile(virQEMUDriver *driver, virDoma= inObj *vm, =20 /* Increase migration bandwidth to unlimited since target is a file. * Failure to change migration speed is not fatal. */ - if (!(migParams =3D qemuMigrationParamsNew())) + if (!(migParams =3D qemuMigrationParamsForSave(false))) return -1; =20 if (qemuMigrationParamsSetULL(migParams, diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 4fc9199f1c..d48cdd5506 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -792,6 +792,27 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr para= ms, } =20 =20 +qemuMigrationParams * +qemuMigrationParamsForSave(bool sparse) +{ + g_autoptr(qemuMigrationParams) saveParams =3D NULL; + + if (!(saveParams =3D qemuMigrationParamsNew())) + return NULL; + + if (sparse) { + if (virBitmapSetBit(saveParams->caps, QEMU_MIGRATION_CAP_MAPPED_RA= M) < 0) + return NULL; + if (virBitmapSetBit(saveParams->caps, QEMU_MIGRATION_CAP_MULTIFD) = < 0) + return NULL; + saveParams->params[QEMU_MIGRATION_PARAM_MULTIFD_CHANNELS].value.i = =3D 1; + saveParams->params[QEMU_MIGRATION_PARAM_MULTIFD_CHANNELS].set =3D = true; + } + + return g_steal_pointer(&saveParams); +} + + int qemuMigrationParamsDump(qemuMigrationParams *migParams, virTypedParameterPtr *params, diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index 2379950ce9..88a1bc1a66 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -87,6 +87,9 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr params, unsigned int flags, qemuMigrationParty party); =20 +qemuMigrationParams * +qemuMigrationParamsForSave(bool sparse); + int qemuMigrationParamsDump(qemuMigrationParams *migParams, virTypedParameterPtr *params, --=20 2.43.0 From nobody Fri Dec 19 18:47:07 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1738953653; cv=none; d=zohomail.com; s=zohoarc; b=AY6SMzinPV4IWgK/xsWhrm/rJvw5KHYhXYbbbNU3cctf4AUjH8tgUU7aEnsUuSQb5w0VXsakiEC7h3hNoAnW66LvN9lgKAmaJtDs7tPpVtgLGdI2sDsNJArfQ7mUcQ7hU8yd1YhBWyttxV4lPjG7RPXGvF+oT0h7cA74+6WFRTE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1738953653; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id; bh=O9u7Cs+l1YTtwFL8TRxa+p3w0S0NPUMCHRKMoBo6lQU=; b=KGOKWG2gztg3Z7cbOio0gw7riPM4v8Xqrh6h+XM36+MuU93pxvr5In6zftyuYV1Bnh4zAU0TkXJNLlKimgasHU9wgk2vfzWuOkoNxZ3j05glr+2s4AKnNmBjSbcbdni2kQLUxxh3OY35hLlRloRnbScP4/scD2gILZvUrQa7BvA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 173895365330320.428731801931463; Fri, 7 Feb 2025 10:40:53 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 582981941; Fri, 7 Feb 2025 13:40:52 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id A7F731744; Fri, 7 Feb 2025 13:38:14 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id EAA38153A; Fri, 7 Feb 2025 13:38:07 -0500 (EST) Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 961EE15B4 for ; Fri, 7 Feb 2025 13:37:49 -0500 (EST) Received: by mail-wr1-f54.google.com with SMTP id ffacd0b85a97d-38dcac27bcbso637358f8f.0 for ; Fri, 07 Feb 2025 10:37:49 -0800 (PST) Received: from localhost (205-201-32-8.scinternet.net. [205.201.32.8]) by smtp.gmail.com with UTF8SMTPSA id d2e1a72fcca58-73048c1623dsm3399896b3a.132.2025.02.07.10.37.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 10:37:47 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1738953468; x=1739558268; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=BYVpqNRnIk0iGdrdba8UNztTzwReQwWb373ObpYQ6iI=; b=amUE5I6bgekOd4+B5wOC0AQ0c9hPoM1BaUPoVTlb25LfRIsXj+2d4mgBtOxbjAj+wp /pu9PjKnItPreKiZHNYJkx+vePvyUzwP23zGhWjD34qYIKj5rcjbBZ8oN9Wo9rRPhqlD haJ8E30EFlwoCNsMPZj0EXolUEaeX6KnlYFpxI57+KresxQZBHQCG+NEfmYHC1ADnDcI nNEHJ6cRhdL9Eprr7nIvI3SnU/Tv2+NxLrj/XfBtHeZX8Hjsx6cvsSXrWUlqa4utLsVS RZBU3uc/RrEflhRrEtcrWg+HI87wNUn9c6U9n64KMee7o66EIissF7MlnVHxlmG1oS/t SFEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738953468; x=1739558268; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=BYVpqNRnIk0iGdrdba8UNztTzwReQwWb373ObpYQ6iI=; b=tdQ4tlzaf/bwlxBsXVvVm+IuG6TXLBqlobj6OzQUBYHi+JaR5SMT0HsUcH6RwhN/Lx m+eDFGOCsWK5mdDoOn0jMNQBBZNPyi7dMZHtKlamvU1YpJWGMcQ731Qlv1zcR04Aphjg Ke0MBOII2yUO6evWNCB/kR62nFYCMHjZIu7onaysviS09HoQFIRm0h4UwjGklIpyo53B lsK7/ZEzkPojUs48b/wE8flvcA3C2FGb0IimU97mDAQ2/NEELSSAei7e7fDuxAS6Z7I0 AWMeg6Op09sz0/HIhKIsJPVDYTlNKUFv9BMhskTkcevbq+kOjOvbHIcRlbgj82FxTp0K 246Q== X-Gm-Message-State: AOJu0YxD+Ysx7Vh31NNZ7lYOXdj6tN8eMBRMj9PPtpjc9Udea+3ptGha amHmIuaK1Wjd4N62PsZrNq0J6zKi1TJj1K3qU0b4nHNQe/btq6JIFToCyP769h8ldwMje5QT3Vb u X-Gm-Gg: ASbGncuN4sFXrGaqbpHexQvKE7sWEfeD69lfA1G65Cu8aMvhoyJNAs2lIcQhSbMvSPN qAU9ZPQtsttmaWOd0OxTriz7VTCt2N7yJtn+/Tm9cS5XTHIAvftUIB/AmiFCAQqGifGX6mhkEgq U1qKt5V5y65nyCOfoIhTrihmMOIKjw/MV53G4uQMU59ACI/+ckdnIANJU7cMdUHzwIITaGv+RDO tFGjzZ9RvgNWRJpkT2SVAwxPmr/11rZabvF+FHyHsCS8182pnkA7AyoeU8KvgNB3FrxV6v5AlwG GeXCkT2DBXq9pcKgoj4nXgBwpf4jQwlENA== X-Google-Smtp-Source: AGHT+IHZAhGUtOiCgJo85lAlqd0MoAxFASVce7DDJtW6klTIhgvzxHKpLKSre9I/FWIjDez6UL2XWA== X-Received: by 2002:a5d:47c8:0:b0:38d:b8fd:591f with SMTP id ffacd0b85a97d-38dbb20b89amr6338473f8f.5.1738953468378; Fri, 07 Feb 2025 10:37:48 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V3 07/19] qemu_saveimage: add "sparse" to supported save image formats Date: Fri, 7 Feb 2025 11:27:18 -0700 Message-ID: <20250207183730.21686-8-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250207183730.21686-1-jfehlig@suse.com> References: <20250207183730.21686-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: ZPK7HUVV5F6DWY6TZDD4SK4MTKCHDFCX X-Message-ID-Hash: ZPK7HUVV5F6DWY6TZDD4SK4MTKCHDFCX X-MailFrom: jfehlig@suse.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: farosas@suse.de X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Jim Fehlig via Devel Reply-To: Jim Fehlig X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1738953655079019100 Content-Type: text/plain; charset="utf-8" Extend the list of formats to include "sparse", which uses QEMU's mapped-ram stream format [1] to write guest memory blocks at fixed offsets in the save image file. [1] https://gitlab.com/qemu-project/qemu/-/blob/master/docs/devel/migration= /mapped-ram.rst?ref_type=3Dheads Signed-off-by: Jim Fehlig --- src/qemu/qemu.conf.in | 9 ++++++++- src/qemu/qemu_saveimage.c | 2 ++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/qemu/qemu.conf.in b/src/qemu/qemu.conf.in index d853136f10..ab9725e40d 100644 --- a/src/qemu/qemu.conf.in +++ b/src/qemu/qemu.conf.in @@ -588,11 +588,18 @@ # disk space when saving large memory guests. Various compression formats = are # available for specifying a save image compressed by the named algorithm. # Supported compression formats are "zstd", "lzop", "gzip", "bzip2", and "= xz". +# The "sparse" format uses QEMU's mapped-ram stream format to write guest = memory +# blocks at fixed offsets in the save image file. =20 # save_image_format can be used to select the desired save format. "raw" is # the traditional format used by libvirt and is also the default. The # compression formats can be used to save disk space, although this typica= lly -# results in longer save and restore times. +# results in longer save and restore times. The "sparse" format results in= a +# save image file that is roughly the logical size of the guest's memory, +# although on-disk size is a function of guest memory usage. The "sparse" +# format is useful when a predictable maximum save image file size is +# needed. The other formats can result in a save image file much larger +# than guest memory if the guest runs a memory intensive workload. # # save_image_format is used with 'virsh save' or 'virsh managedsave'. It is # an error if the specified save_image_format is not valid, or cannot be diff --git a/src/qemu/qemu_saveimage.c b/src/qemu/qemu_saveimage.c index 5c889fee11..6888528729 100644 --- a/src/qemu/qemu_saveimage.c +++ b/src/qemu/qemu_saveimage.c @@ -48,6 +48,7 @@ typedef enum { QEMU_SAVE_FORMAT_XZ =3D 3, QEMU_SAVE_FORMAT_LZOP =3D 4, QEMU_SAVE_FORMAT_ZSTD =3D 5, + QEMU_SAVE_FORMAT_SPARSE =3D 6, /* Note: add new members only at the end. These values are used in the on-disk format. Do not change or re-use numbers. */ @@ -64,6 +65,7 @@ VIR_ENUM_IMPL(qemuSaveFormat, "xz", "lzop", "zstd", + "sparse", ); =20 static inline void --=20 2.43.0 From nobody Fri Dec 19 18:47:07 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1738953680; cv=none; d=zohomail.com; s=zohoarc; b=naUHHwy3BUDMFv1NjhdUCIobnftHjL5DR2Oi2cN6QPoMP1ETEOvKTd9YFYgVA96El2fa+JvIf2UpEvrM78YMnN70lYV37114bxB61+kb/wzSph0khQS73FJUXo3lcgP+wvssxSufZRqWlvjD5XO029liJEzvN+EoiL/vuwey76E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1738953680; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id; bh=KVzOjUZTwqNB+IMRtWItBaHG7xaPuQpH0vKogDhpEvo=; b=GJiZUVkGIo6fKgUOTJew0d1JHcbAOpkreTRukAdh+NT3eky6yBYrKl4Aspkxrye5Kmc3iOY1vpDyBlFbujXaoA9huqXy1cOkvyBSEBL8wwWIASWDnMKiowiL2t0cUYYpHn2HSaLreiq8JihzftfyWI/yTPiSKTpUlnTioLKQe5o= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1738953680080538.118289350892; Fri, 7 Feb 2025 10:41:20 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 08D8E15C5; Fri, 7 Feb 2025 13:41:19 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 6B4D71601; Fri, 7 Feb 2025 13:38:16 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 0EBF1152F; Fri, 7 Feb 2025 13:38:09 -0500 (EST) Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id C1DD215D3 for ; Fri, 7 Feb 2025 13:37:51 -0500 (EST) Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-4363dc916ceso21413925e9.0 for ; Fri, 07 Feb 2025 10:37:51 -0800 (PST) Received: from localhost (205-201-32-8.scinternet.net. [205.201.32.8]) by smtp.gmail.com with UTF8SMTPSA id 98e67ed59e1d1-2fa09b5c692sm3709323a91.42.2025.02.07.10.37.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 10:37:50 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1738953470; x=1739558270; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=qnKuj9xCChcznLnTdljfYgReIkKHN51FLYM4HfI4yJ8=; b=VuiJtKy9TibMXqICmNeL8I93w8LN9en59g1PeJ3jCZIXr3zzUSEbgno3gWmt6SB7+E 4NrTlqT9Y0/PerA5bBsvhbSmXPkKhq3nhrRO3KDcmbeOJkiJ6pQPphYEG2HD+HRQnCEb DbDEAyJih5LoFfaZwgmw6df9vyfLZJ/f53YoDQoRU2F+VQJJCWpthT9qgnD/rRYi+FWk /Yn0nOeIvykiKdinClIvsE7UGtgmy8zQZh1/d5JDRbTLTbS8Pdymz4Ohu/n/f7OoBMOP oXueGRIAkXWOzHVZIISXLKzYoaXJRotw8bsahFUoQD0Gkn1Tgf+pM/lwqgDQ4PzA9V9i GquA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738953470; x=1739558270; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qnKuj9xCChcznLnTdljfYgReIkKHN51FLYM4HfI4yJ8=; b=RzweVwo+G1gls6i0heV9seSrREyz7vNMwrvIptAYKMjUH0kxIz3uBQZJ5Ygb4kH1DL fa8n6EMdMngTCAMDvTLD1Yf7mJsJ1OaxkVK5FAwPxuJ5UryAlWdlMo+g1gtirAFDz73s IhNOwmG+WnXpEiVuH7qXWjlbUdIdDrGykUtEwZ+OsEIpNpNeGTnDjIy9lrqNV0qX7CwL Wk1J0RRwXHDvTiLYuRPYBY9UzQa8wIIx1CnLws306GZZibst11bP54HLUkfoMTUTZcsA swM+3jGXHF3XsfC+9R4kDo6CQEc1TikNowYLaHCxrHWwE6O6JOZF/iOMLIZDaW2eHJla vQxg== X-Gm-Message-State: AOJu0YyLWNRv0FS9ODMFBp7ffKOJlStnutXphoHFN8H4Ub7qFWJmVApn pfVfsKzXLe6DZyVvcr/wQhvyEUl3R0Y/3Uk6AJOUjJjY9VTj2hFRnszmfT1QrL5y6d7LfzJh3Mx i X-Gm-Gg: ASbGncvlnYEXptZDXFndebCL+/XbBjbbNs1kgkVi8pElczITCgS/UxKgXtFuoOiSCU7 s7LtclppmHQGN5y8pBG10AgBnBIQmAuyloJWviUjuqnsVCVUHpyXCHY9kvpry8imQPm1LqIYHaA izZAAdqKetwkbnJoyJfw2Okr+CIBR1Np0rWbSamdiSxrrrzfnIXKq6lXo2e9p+NUFsAEkOSUAXs 505aF0IoEwrRS8gcKMtsRyXL89OEEIczqLYND1hvCVIMGT2eJbQpcHDbtzhAWx+fNtL8/srRlip /6iLAWz8g3FLpqBzvF6xaQb9TWOWhQ5uNQ== X-Google-Smtp-Source: AGHT+IEM7hoCEnQvLPO9oE+JbIHrlT8Lj1KCxkrH7wfOnC6CO6eWPRDJnVm42KUdE0vxxjDpKJVaBw== X-Received: by 2002:a05:6000:188b:b0:38d:b7dc:30b8 with SMTP id ffacd0b85a97d-38dbb2cf5b8mr7157803f8f.18.1738953470615; Fri, 07 Feb 2025 10:37:50 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V3 08/19] qemu: Add helper function for creating save image fd Date: Fri, 7 Feb 2025 11:27:19 -0700 Message-ID: <20250207183730.21686-9-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250207183730.21686-1-jfehlig@suse.com> References: <20250207183730.21686-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: LPB7DI2ZRDY2AJ3PZMG5V2FWWCY332F5 X-Message-ID-Hash: LPB7DI2ZRDY2AJ3PZMG5V2FWWCY332F5 X-MailFrom: jfehlig@suse.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: farosas@suse.de X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Jim Fehlig via Devel Reply-To: Jim Fehlig X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1738953681235019100 Content-Type: text/plain; charset="utf-8" Move the code in qemuSaveImageCreate that opens, labels, and wraps the save image fd to a helper function, providing more flexibility for upcoming mapped-ram support. Signed-off-by: Jim Fehlig --- src/qemu/qemu_saveimage.c | 65 +++++++++++++++++++++++++++------------ 1 file changed, 45 insertions(+), 20 deletions(-) diff --git a/src/qemu/qemu_saveimage.c b/src/qemu/qemu_saveimage.c index 6888528729..4304530610 100644 --- a/src/qemu/qemu_saveimage.c +++ b/src/qemu/qemu_saveimage.c @@ -445,6 +445,50 @@ qemuSaveImageDecompressionStop(virCommand *cmd, } =20 =20 +static int +qemuSaveImageCreateFd(virQEMUDriver *driver, + virDomainObj *vm, + const char *path, + virFileWrapperFd *wrapperFd, + bool *needUnlink, + unsigned int flags) +{ + g_autoptr(virQEMUDriverConfig) cfg =3D virQEMUDriverGetConfig(driver); + int ret =3D -1; + VIR_AUTOCLOSE fd =3D -1; + int directFlag =3D 0; + unsigned int wrapperFlags =3D VIR_FILE_WRAPPER_NON_BLOCKING; + + if (flags & VIR_DOMAIN_SAVE_BYPASS_CACHE) { + wrapperFlags |=3D VIR_FILE_WRAPPER_BYPASS_CACHE; + directFlag =3D virFileDirectFdFlag(); + if (directFlag < 0) { + virReportError(VIR_ERR_OPERATION_FAILED, "%s", + _("bypass cache unsupported by this system")); + return -1; + } + } + + fd =3D virQEMUFileOpenAs(cfg->user, cfg->group, false, path, + O_WRONLY | O_TRUNC | O_CREAT | directFlag, + needUnlink); + + if (fd < 0) + return -1; + + if (qemuSecuritySetImageFDLabel(driver->securityManager, vm->def, fd) = < 0) + return -1; + + if (!(wrapperFd =3D virFileWrapperFdNew(&fd, path, wrapperFlags))) + return -1; + + ret =3D fd; + fd =3D -1; + + return ret; +} + + /* Helper function to execute a migration to file with a correct save head= er * the caller needs to make sure that the processors are stopped and do al= l other * actions besides saving memory */ @@ -461,33 +505,14 @@ qemuSaveImageCreate(virQEMUDriver *driver, bool needUnlink =3D false; int ret =3D -1; int fd =3D -1; - int directFlag =3D 0; virFileWrapperFd *wrapperFd =3D NULL; - unsigned int wrapperFlags =3D VIR_FILE_WRAPPER_NON_BLOCKING; =20 /* Obtain the file handle. */ - if ((flags & VIR_DOMAIN_SAVE_BYPASS_CACHE)) { - wrapperFlags |=3D VIR_FILE_WRAPPER_BYPASS_CACHE; - directFlag =3D virFileDirectFdFlag(); - if (directFlag < 0) { - virReportError(VIR_ERR_OPERATION_FAILED, "%s", - _("bypass cache unsupported by this system")); - goto cleanup; - } - } + fd =3D qemuSaveImageCreateFd(driver, vm, path, wrapperFd, &needUnlink,= flags); =20 - fd =3D virQEMUFileOpenAs(cfg->user, cfg->group, false, path, - O_WRONLY | O_TRUNC | O_CREAT | directFlag, - &needUnlink); if (fd < 0) goto cleanup; =20 - if (qemuSecuritySetImageFDLabel(driver->securityManager, vm->def, fd) = < 0) - goto cleanup; - - if (!(wrapperFd =3D virFileWrapperFdNew(&fd, path, wrapperFlags))) - goto cleanup; - if (virQEMUSaveDataWrite(data, fd, path) < 0) goto cleanup; =20 --=20 2.43.0 From nobody Fri Dec 19 18:47:07 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1738953701; cv=none; d=zohomail.com; s=zohoarc; b=HoMd78U9tDMU6a9WxgI1MvjK76j3nVJ34mH1RU0tQlRJrFqcuy6g6dSp5ppVn7W2Xb/zpcft8vfejLLwP7Q6+mOuJX6uTM5eXGMY0nQf7NIVLMD/Sf9I0ecZHGU88XBgSEFlWjxEm3dugcCTImqv/KQPykHFpE3Xy6w66OaSeVQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1738953701; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id; bh=j9CiOPGUJ/VooGZJlBg9crgsrbuTG8cuTz92sGtxFYA=; b=PY8VpS13QVpiskDuTdz5xPWhuru/YvBfZBpe45Gponb9VIW/IVp/QmVHt2l3/KdArt5mpAQzkKdcNf36VGFQmFSJxNzQ1NY3CIfCedtasK4XcnstayxRsvFMU3R5Fih6UqFHpNMUzr9bAmiSTiVVUJYmC25CR36y8yb1JnXSIRo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1738953701749652.0267659483118; Fri, 7 Feb 2025 10:41:41 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 2A05616A0; Fri, 7 Feb 2025 13:41:41 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 63292178F; Fri, 7 Feb 2025 13:38:19 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 9897216F4; Fri, 7 Feb 2025 13:38:09 -0500 (EST) Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id DC77015F8 for ; Fri, 7 Feb 2025 13:37:53 -0500 (EST) Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-43634b570c1so16842695e9.0 for ; Fri, 07 Feb 2025 10:37:53 -0800 (PST) Received: from localhost (205-201-32-8.scinternet.net. [205.201.32.8]) by smtp.gmail.com with UTF8SMTPSA id d2e1a72fcca58-73048e20b2esm3380203b3a.179.2025.02.07.10.37.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 10:37:52 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1738953473; x=1739558273; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=1X1RxgTsd69yNLquGzGuXSBt2hlG5INZ33e1mv/xPOU=; b=L0wEHBPQ26A22IkXqQZuWOv/1DYiLx7+tl4L3TlNkQ8j6R2zUyFCn/QZyGy41Dc9Ya w9/enNdoVfnGfrj+/EuYTERMIJMAghzvW9xejTwCk14tX+L42FpI3ntoJFAGB+ikBMoa WrQZuNzzy4J1OgDKiyPyPipsEdOIQHpd6C6/sNejDbc8gkgnxWYUWs0cV/380/zfKpOm fv+x1qU/bq925RuprKKm4PQhjkByd22ezUJaW+WkfKxh0iNCGQYZbvueLokRgo0deUdK J/mhzBBXOQE8Ua9xIcR8xJ5Z0Nu6g1pk89rnJ22lY74CJG6exjsVbltPtDl6vB/Fz/o0 U0jQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738953473; x=1739558273; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1X1RxgTsd69yNLquGzGuXSBt2hlG5INZ33e1mv/xPOU=; b=HYKf2fFiHGIQ8R1H5EOSmR0mvHLknQa/NbdM/W9CaPm9UdXykuiQIHELXfdzguf3HU AWpHmsQ/NFHESDEGM1Nyp8vRLciKhc1AzJQ6O16QbD4e0mTp+GI1ukZ8V5huLe55Nvab bP1rh9pn3fbuj/vp8Ghk6bV0esOsful2QuL/4ZaOvAoPYJniTmidFQPpqyFl8AbHiejj TTg3edAW0hZ29Ix1o1JoW3PSYLiM/f4RnLPtSWWUVT1w39wYVQ0VLH+GskRhAnSXbT/z OO7DF/qDwOgKoxub6oDb2UBUo2LGfB26qtJ9frLHemd+FEKcZUOPb/EMpnsFTD5PB5/K lc2w== X-Gm-Message-State: AOJu0YxM7+4h88CU+rpbMlMXxKdnsqaEJzv51XC1kTnMp/xPUkoPo65T fHEWgr+Dbjoooshi6VtMG+4AjtHru8uECI2vySwQEdHu/qs9i+RxeSouWm0H8Ko+ptRYqSlf+5f + X-Gm-Gg: ASbGncsGBlFqU8BnW7stgZm6uw7CyPlOYxVRTNBQlWsP4AnFOlCe2noNaUBwOmakhe8 YB+c6fQgR9KQEjT+jI57eY/NZOMpt9VNjr0qT2drszavP0OiZQa1TT5JSY+FeFMfm9x+bxUQXYK IuS1A82Qf0scKD67eyvHCb1Kd5597970CA2QkeAOjXdikKjJRAWTY1KGXJHAJqJtlM/yh/KKlkQ TjXUzfEHcQDUxaI7DyVrh3iz3TteZGBj0ldoKV1JXLKDGUYgtsp5u74vvj3dZI6Ng+sh2gXyO+Y uKI6qDpOuscmkMVrKB3h3gS9oaE1Tksjvg== X-Google-Smtp-Source: AGHT+IFC0DZFCqt4RxW7QXCwDe1Wr8MUeqS9mXx+jFPqEbYm6hB2dADTS71ehUmC9i4L6kNGXsaUOw== X-Received: by 2002:a5d:5889:0:b0:38d:bd41:2f92 with SMTP id ffacd0b85a97d-38dc9360488mr2952365f8f.50.1738953472743; Fri, 07 Feb 2025 10:37:52 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V3 09/19] qemu: Move declaration of virQEMUSaveFormat to header file Date: Fri, 7 Feb 2025 11:27:20 -0700 Message-ID: <20250207183730.21686-10-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250207183730.21686-1-jfehlig@suse.com> References: <20250207183730.21686-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: OTSVM4BG63U3ZP4CQBGTRDUJMA6UHYOJ X-Message-ID-Hash: OTSVM4BG63U3ZP4CQBGTRDUJMA6UHYOJ X-MailFrom: jfehlig@suse.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: farosas@suse.de X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Jim Fehlig via Devel Reply-To: Jim Fehlig X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1738953702345019000 Content-Type: text/plain; charset="utf-8" Allow use of the enum outside of qemu_saveimage. Signed-off-by: Jim Fehlig --- src/qemu/qemu_saveimage.c | 20 -------------------- src/qemu/qemu_saveimage.h | 20 ++++++++++++++++++++ 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/qemu/qemu_saveimage.c b/src/qemu/qemu_saveimage.c index 4304530610..59237cc46a 100644 --- a/src/qemu/qemu_saveimage.c +++ b/src/qemu/qemu_saveimage.c @@ -37,26 +37,6 @@ =20 VIR_LOG_INIT("qemu.qemu_saveimage"); =20 -typedef enum { - QEMU_SAVE_FORMAT_RAW =3D 0, - QEMU_SAVE_FORMAT_GZIP =3D 1, - QEMU_SAVE_FORMAT_BZIP2 =3D 2, - /* - * Deprecated by xz and never used as part of a release - * QEMU_SAVE_FORMAT_LZMA - */ - QEMU_SAVE_FORMAT_XZ =3D 3, - QEMU_SAVE_FORMAT_LZOP =3D 4, - QEMU_SAVE_FORMAT_ZSTD =3D 5, - QEMU_SAVE_FORMAT_SPARSE =3D 6, - /* Note: add new members only at the end. - These values are used in the on-disk format. - Do not change or re-use numbers. */ - - QEMU_SAVE_FORMAT_LAST -} virQEMUSaveFormat; - -VIR_ENUM_DECL(qemuSaveFormat); VIR_ENUM_IMPL(qemuSaveFormat, QEMU_SAVE_FORMAT_LAST, "raw", diff --git a/src/qemu/qemu_saveimage.h b/src/qemu/qemu_saveimage.h index 53ae222467..a5b55c6b10 100644 --- a/src/qemu/qemu_saveimage.h +++ b/src/qemu/qemu_saveimage.h @@ -32,6 +32,26 @@ =20 G_STATIC_ASSERT(sizeof(QEMU_SAVE_MAGIC) =3D=3D sizeof(QEMU_SAVE_PARTIAL)); =20 +typedef enum { + QEMU_SAVE_FORMAT_RAW =3D 0, + QEMU_SAVE_FORMAT_GZIP =3D 1, + QEMU_SAVE_FORMAT_BZIP2 =3D 2, + /* + * Deprecated by xz and never used as part of a release + * QEMU_SAVE_FORMAT_LZMA + */ + QEMU_SAVE_FORMAT_XZ =3D 3, + QEMU_SAVE_FORMAT_LZOP =3D 4, + QEMU_SAVE_FORMAT_ZSTD =3D 5, + QEMU_SAVE_FORMAT_SPARSE =3D 6, + /* Note: add new members only at the end. + These values are used in the on-disk format. + Do not change or re-use numbers. */ + + QEMU_SAVE_FORMAT_LAST +} virQEMUSaveFormat; +VIR_ENUM_DECL(qemuSaveFormat); + typedef struct _virQEMUSaveHeader virQEMUSaveHeader; struct _virQEMUSaveHeader { char magic[sizeof(QEMU_SAVE_MAGIC)-1]; --=20 2.43.0 From nobody Fri Dec 19 18:47:07 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1738953759; cv=none; d=zohomail.com; s=zohoarc; b=XSV25mRNOjzAXPTdHcTqSjT2yKPJYFwB+BTmpQhLB22HwHm79H1Rpx/6LDu12WDMQFx0XA/QWMFoce3ssVWdpZ0tbCGSSSWUZKY7y205KTdbZPdtEb5EsmtkccMsshTegGR4skbq+xnsAaWl5HyChixqRUtLF9Xo66++Z1e4x94= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1738953759; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id; bh=1KgXyx8sah6SbhTK4GCf9j2N/W1MIBK+z3u1PeuK55g=; b=NqtsBS9+Qh26SHzBSlcvi8++Q1QWaRk2PSFjwzYTv8P41N3ws3xrL/BeP24Xfl/8vpIjNw9D4ti/KMwHcEuTHuFqS+F39pZ8CqLYlSA+bvjFZtKdcwCVedk6VnhUQnD76lmGcOS1ZQ8HPJzylSVbw2n3J0W4DCT6VBVecLT1BF4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1738953759081260.15481500731005; Fri, 7 Feb 2025 10:42:39 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 1806C15A5; Fri, 7 Feb 2025 13:42:38 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 8CA3B1715; Fri, 7 Feb 2025 13:38:21 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id A572C1508; Fri, 7 Feb 2025 13:38:13 -0500 (EST) Received: from mail-wr1-f43.google.com (mail-wr1-f43.google.com [209.85.221.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 68C00159C for ; Fri, 7 Feb 2025 13:37:56 -0500 (EST) Received: by mail-wr1-f43.google.com with SMTP id ffacd0b85a97d-38dd14c99c3so146655f8f.3 for ; Fri, 07 Feb 2025 10:37:56 -0800 (PST) Received: from localhost (205-201-32-8.scinternet.net. [205.201.32.8]) by smtp.gmail.com with UTF8SMTPSA id 98e67ed59e1d1-2f9e1e40ab8sm5877956a91.42.2025.02.07.10.37.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 10:37:54 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1738953475; x=1739558275; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ZFivyDUpbWNs8S/MdEFSVn5Dom6/G56qWVI+FwKZmPk=; b=Psit60MaThya9CtP69CLWj7g6TZWDNLnOfxf4K5HKTC2mldX/mAVnVP61nTELlCtMO PMIOqYKNGYW4SLvkSsWo+jSjrQeDHDF6KXYHXGINNgH0RX51s7fL5LYapQI0VvmQFAUL kuOzEnu5wBF9NKDvbpmwqLznq41WwZ+M2RxmyfO1jOZIEHhglDb9+I51JO/L3ild0VBh fJs1v/E+YY+4oAPU+HrK7/aZrIG+KTmydkSt10gBGlhvOiKZk8YHmeR4GgleaW9xaXaF iCaW61pjHIhWhGRIbmpq5FR26h49RbjJmpxQnZU19pSI69PTIlZJ03nvht6EC9vC0PHM t3UQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738953475; x=1739558275; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ZFivyDUpbWNs8S/MdEFSVn5Dom6/G56qWVI+FwKZmPk=; b=UZzg+FD9sZAevUN0El/nyrZaTwMmLNI3c6aP+X9T32++239d4AVJC5rym8T7v1GIys wflN5QyQoDF+E6+xWOUVzfrwIBItqGZWpHGuXwyk27tsjy3yaomYX8egQ2PihjXQgQuw hZTgQIEYW6ScYmov2GIJoF4IYuV2oM8YhQZCTsR0lpYPg8CUGbLZeVcE5iVEY7leu/oo xJK2KxPUzfnRHByE7fRSn9LvGbDlbTsSsh7D0+rahkspDdi2TiQHTkInXzJVQGdtAdEz lmIPmDwUHNkE4h3Dk4UXwusGyV4m/H6OnsnJG+UGDspyMzcn11Sc2ScewZCVA/xOQzS1 3TMw== X-Gm-Message-State: AOJu0YypZRB18UOvabtDPeyneM5iunKNIWe0pT4GJq7//zLy+G2txYc7 xmC9sPQBXjpEe/U1GnDrJE5Nu3/3qgLJ9vD5WUO1M+6gswr/Zcf+P5ifOE8DnxSciwNWfkUvocD l X-Gm-Gg: ASbGncuzkf3a/aPkTjwAl7QDqn8z1fSKcTV3k+I36+oY/p0p2SSfANo1sZnVhyfZ4OD b2DG/zx3zS61z9KfOOJn8EtkFBGBi4WN3e6Fv1FN6nGKzarvMxLXTpvHW6Pcb8Imiiwx4ogqUZ4 4tsV7teV2oN2Rrg8jMW9VtjhmGY3gNrIBosHf1qTDxsfzzkc4s/+tMvFvQomMm9unBvIYooCQSY 7I6tiKT6jbd2Ziult1dX4j9Tm0VyxDbYyRqmhy8ICanYE+fOOFIjUZUVzHIKM6AG6KS/i8qZcgo ZpK5ACYUSXDKfRRE9tx9EGpnmUu7nyo3Qw== X-Google-Smtp-Source: AGHT+IHcmjyr4p+fJXCyaXE7cOygoUJLt3vpm5HrqmbBlBJHrgD+8s4WoK1TsuWjrsv4xZ6X8r61GQ== X-Received: by 2002:a05:6000:1a8a:b0:38c:5b9e:ab83 with SMTP id ffacd0b85a97d-38dc935f177mr3430045f8f.40.1738953475017; Fri, 07 Feb 2025 10:37:55 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V3 10/19] qemu: Add support for mapped-ram on save Date: Fri, 7 Feb 2025 11:27:21 -0700 Message-ID: <20250207183730.21686-11-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250207183730.21686-1-jfehlig@suse.com> References: <20250207183730.21686-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: Y3UZGFQL73KMELVB56QSS32FJUG4BRV7 X-Message-ID-Hash: Y3UZGFQL73KMELVB56QSS32FJUG4BRV7 X-MailFrom: jfehlig@suse.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: farosas@suse.de X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Jim Fehlig via Devel Reply-To: Jim Fehlig X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1738953761593019100 Content-Type: text/plain; charset="utf-8" Introduce support for QEMU's new mapped-ram stream format [1]. mapped-ram can be enabled by setting the 'save_image_format' setting in qemu.conf to 'sparse'. To use mapped-ram with QEMU: - The 'mapped-ram' migration capability must be set to true - The 'multifd' migration capability must be set to true and the 'multifd-channels' migration parameter must set to 1 - QEMU must be provided an fdset containing the migration fd - The 'migrate' qmp command is invoked with a URI referencing the fdset and an offset where to start reading or writing the data stream, e.g. {"execute":"migrate", "arguments":{"detach":true,"resume":false, "uri":"file:/dev/fdset/0,offset=3D0x11921"}} The mapped-ram stream, in conjunction with direct IO and multifd support provided by subsequent patches, can significantly improve the time required to save VM memory state. The following tables compare mapped-ram with the existing, sequential save stream. In all cases, the save and restore operations are to/from a block device comprised of two NVMe disks in RAID0 configuration with xfs (~8600MiB/s). The values in the 'save time' and 'restore time' columns were scraped from the 'real' time reported by time(1). The 'Size' and 'Blocks' columns were provided by the corresponding outputs of stat(1). VM: 32G RAM, 1 vcpu, idle (shortly after boot) | save | restore | | time | time | Size | Blocks -----------------------+---------+---------+--------------+-------- legacy | 6.193s | 4.399s | 985744812 | 1925288 -----------------------+---------+---------+--------------+-------- mapped-ram | 5.109s | 1.176s | 34368554354 | 1774472 -----------------------+---------+---------+--------------+-------- legacy + direct IO | 5.725s | 4.512s | 985765251 | 1925328 -----------------------+---------+---------+--------------+-------- mapped-ram + direct IO | 4.627s | 1.490s | 34368554354 | 1774304 -----------------------+---------+---------+--------------+-------- mapped-ram + direct IO | | | | + multifd-channels=3D8 | 4.421s | 0.845s | 34368554318 | 1774312 ------------------------------------------------------------------- VM: 32G RAM, 30G dirty, 1 vcpu in tight loop dirtying memory | save | restore | | time | time | Size | Blocks -----------------------+---------+---------+--------------+--------- legacy | 25.800s | 14.332s | 33154309983 | 64754512 -----------------------+---------+---------+--------------+--------- mapped-ram | 18.742s | 15.027s | 34368559228 | 64617160 -----------------------+---------+---------+--------------+--------- legacy + direct IO | 13.115s | 18.050s | 33154310496 | 64754520 -----------------------+---------+---------+--------------+--------- mapped-ram + direct IO | 13.623s | 15.959s | 34368557392 | 64662040 -----------------------+-------- +---------+--------------+--------- mapped-ram + direct IO | | | | + multifd-channels=3D8 | 6.994s | 6.470s | 34368554980 | 64665776 -------------------------------------------------------------------- As can be seen from the tables, one caveat of mapped-ram is the logical file size of a saved image is basically equivalent to the VM memory size. Note however that mapped-ram typically uses fewer blocks on disk, hence the name 'sparse' for 'save_image_format'. Also note the mapped-ram stream is incompatible with the existing stream format, hence mapped-ram cannot be used to restore an image saved with the existing format and vice versa. [1] https://gitlab.com/qemu-project/qemu/-/blob/master/docs/devel/migration= /mapped-ram.rst?ref_type=3Dheads Signed-off-by: Jim Fehlig --- src/qemu/qemu_driver.c | 23 +++++- src/qemu/qemu_migration.c | 149 ++++++++++++++++++++++++++------------ src/qemu/qemu_migration.h | 4 +- src/qemu/qemu_monitor.c | 34 +++++++++ src/qemu/qemu_monitor.h | 4 + src/qemu/qemu_saveimage.c | 33 +++++---- src/qemu/qemu_saveimage.h | 1 + src/qemu/qemu_snapshot.c | 14 +++- 8 files changed, 199 insertions(+), 63 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 78bfaa5b3a..f77516a4f4 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -2620,6 +2620,7 @@ qemuDomainSaveInternal(virQEMUDriver *driver, qemuDomainObjPrivate *priv =3D vm->privateData; virQEMUSaveData *data =3D NULL; g_autoptr(qemuDomainSaveCookie) cookie =3D NULL; + g_autoptr(qemuMigrationParams) saveParams =3D NULL; =20 if (virDomainObjBeginAsyncJob(vm, VIR_ASYNC_JOB_SAVE, VIR_DOMAIN_JOB_OPERATION_SAVE, flags) < = 0) @@ -2628,6 +2629,14 @@ qemuDomainSaveInternal(virQEMUDriver *driver, if (!qemuMigrationSrcIsAllowed(vm, false, VIR_ASYNC_JOB_SAVE, 0)) goto endjob; =20 + if (format =3D=3D QEMU_SAVE_FORMAT_SPARSE && + !qemuMigrationCapsGet(vm, QEMU_MIGRATION_CAP_MAPPED_RAM)) { + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, + _("save image format %1$s is not supported by this = QEMU binary"), + qemuSaveFormatTypeToString(format)); + goto endjob; + } + if (!virDomainObjIsActive(vm)) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("guest unexpectedly quit")); @@ -2691,8 +2700,11 @@ qemuDomainSaveInternal(virQEMUDriver *driver, goto endjob; xml =3D NULL; =20 + if (!(saveParams =3D qemuMigrationParamsForSave(format =3D=3D QEMU_SAV= E_FORMAT_SPARSE))) + goto endjob; + ret =3D qemuSaveImageCreate(driver, vm, path, data, compressor, - flags, VIR_ASYNC_JOB_SAVE); + saveParams, flags, VIR_ASYNC_JOB_SAVE); if (ret < 0) goto endjob; =20 @@ -3126,6 +3138,8 @@ doCoreDump(virQEMUDriver *driver, memory_dump_format) < 0) goto cleanup; } else { + g_autoptr(qemuMigrationParams) dump_params =3D NULL; + if (dumpformat !=3D VIR_DOMAIN_CORE_DUMP_FORMAT_RAW) { virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", _("kdump-compressed format is only supported wi= th memory-only dump")); @@ -3135,8 +3149,11 @@ doCoreDump(virQEMUDriver *driver, if (!qemuMigrationSrcIsAllowed(vm, false, VIR_ASYNC_JOB_DUMP, 0)) goto cleanup; =20 - if (qemuMigrationSrcToFile(driver, vm, fd, compressor, - VIR_ASYNC_JOB_DUMP) < 0) + if (!(dump_params =3D qemuMigrationParamsNew())) + goto cleanup; + + if (qemuMigrationSrcToFile(driver, vm, &fd, compressor, + dump_params, dump_flags, VIR_ASYNC_JOB_= DUMP) < 0) goto cleanup; } =20 diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 4efc03fc00..1e3bee3781 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -7069,46 +7069,17 @@ qemuMigrationProcessUnattended(virQEMUDriver *drive= r, } =20 =20 -/* Helper function called while vm is active. */ -int -qemuMigrationSrcToFile(virQEMUDriver *driver, virDomainObj *vm, - int fd, - virCommand *compressor, - virDomainAsyncJob asyncJob) +static int +qemuMigrationSrcToLegacyFile(virQEMUDriver *driver, + virDomainObj *vm, + int fd, + virCommand *compressor, + virDomainAsyncJob asyncJob) { qemuDomainObjPrivate *priv =3D vm->privateData; - int rc; int ret =3D -1; int pipeFD[2] =3D { -1, -1 }; - unsigned long saveMigBandwidth =3D priv->migMaxBandwidth; char *errbuf =3D NULL; - virErrorPtr orig_err =3D NULL; - g_autoptr(qemuMigrationParams) migParams =3D NULL; - - if (qemuMigrationSetDBusVMState(driver, vm) < 0) - return -1; - - /* Increase migration bandwidth to unlimited since target is a file. - * Failure to change migration speed is not fatal. */ - if (!(migParams =3D qemuMigrationParamsForSave(false))) - return -1; - - if (qemuMigrationParamsSetULL(migParams, - QEMU_MIGRATION_PARAM_MAX_BANDWIDTH, - QEMU_DOMAIN_MIG_BANDWIDTH_MAX * 1024 * 1= 024) < 0) - return -1; - - if (qemuMigrationParamsApply(vm, asyncJob, migParams, 0) < 0) - return -1; - - priv->migMaxBandwidth =3D QEMU_DOMAIN_MIG_BANDWIDTH_MAX; - - if (!virDomainObjIsActive(vm)) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("guest unexpectedly quit")); - /* nothing to tear down */ - return -1; - } =20 if (compressor && virPipe(pipeFD) < 0) return -1; @@ -7125,7 +7096,7 @@ qemuMigrationSrcToFile(virQEMUDriver *driver, virDoma= inObj *vm, goto cleanup; =20 if (!compressor) { - rc =3D qemuMonitorMigrateToFd(priv->mon, 0, fd); + ret =3D qemuMonitorMigrateToFd(priv->mon, 0, fd); } else { virCommandSetInputFD(compressor, pipeFD[0]); virCommandSetOutputFD(compressor, &fd); @@ -7141,12 +7112,98 @@ qemuMigrationSrcToFile(virQEMUDriver *driver, virDo= mainObj *vm, qemuDomainObjExitMonitor(vm); goto cleanup; } - rc =3D qemuMonitorMigrateToFd(priv->mon, 0, pipeFD[1]); + ret =3D qemuMonitorMigrateToFd(priv->mon, 0, pipeFD[1]); if (VIR_CLOSE(pipeFD[0]) < 0 || VIR_CLOSE(pipeFD[1]) < 0) VIR_WARN("failed to close intermediate pipe"); } qemuDomainObjExitMonitor(vm); + + cleanup: + VIR_FORCE_CLOSE(pipeFD[0]); + VIR_FORCE_CLOSE(pipeFD[1]); + + if (errbuf) { + VIR_DEBUG("Compression binary stderr: %s", NULLSTR(errbuf)); + VIR_FREE(errbuf); + } + + return ret; +} + + +static int +qemuMigrationSrcToSparseFile(virQEMUDriver *driver, + virDomainObj *vm, + int *fd, + unsigned int flags, + virDomainAsyncJob asyncJob) +{ + int ret; + + /* mapped-ram does not support directIO */ + if ((flags & VIR_DOMAIN_SAVE_BYPASS_CACHE)) { + virReportError(VIR_ERR_OPERATION_FAILED, "%s", + _("bypass cache unsupported by this system")); + return -1; + } + + if (qemuSecuritySetImageFDLabel(driver->securityManager, vm->def, *fd)= < 0) + return -1; + + if (qemuDomainObjEnterMonitorAsync(vm, asyncJob) < 0) + return -1; + + ret =3D qemuMonitorMigrateToFdSet(vm, 0, fd); + qemuDomainObjExitMonitor(vm); + return ret; +} + + +/* Helper function called while vm is active. */ +int +qemuMigrationSrcToFile(virQEMUDriver *driver, virDomainObj *vm, + int *fd, + virCommand *compressor, + qemuMigrationParams *migParams, + unsigned int flags, + virDomainAsyncJob asyncJob) +{ + qemuDomainObjPrivate *priv =3D vm->privateData; + int rc; + int ret =3D -1; + unsigned long saveMigBandwidth =3D priv->migMaxBandwidth; + virErrorPtr orig_err =3D NULL; + + if (qemuMigrationSetDBusVMState(driver, vm) < 0) + return -1; + + /* Increase migration bandwidth to unlimited since target is a file. + * Failure to change migration speed is not fatal. */ + if (migParams && + qemuMigrationParamsSetULL(migParams, + QEMU_MIGRATION_PARAM_MAX_BANDWIDTH, + QEMU_DOMAIN_MIG_BANDWIDTH_MAX * 1024 * 1= 024) < 0) + return -1; + + if (qemuMigrationParamsApply(vm, asyncJob, migParams, 0) < 0) + return -1; + + priv->migMaxBandwidth =3D QEMU_DOMAIN_MIG_BANDWIDTH_MAX; + + if (!virDomainObjIsActive(vm)) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("guest unexpectedly quit")); + /* nothing to tear down */ + return -1; + } + + if (migParams && + qemuMigrationParamsCapEnabled(migParams, QEMU_MIGRATION_CAP_MAPPED= _RAM)) + rc =3D qemuMigrationSrcToSparseFile(driver, vm, fd, flags, asyncJo= b); + else + rc =3D qemuMigrationSrcToLegacyFile(driver, vm, *fd, compressor, a= syncJob); + if (rc < 0) goto cleanup; =20 @@ -7172,8 +7229,17 @@ qemuMigrationSrcToFile(virQEMUDriver *driver, virDom= ainObj *vm, if (ret < 0 && !orig_err) virErrorPreserveLast(&orig_err); =20 - /* Restore max migration bandwidth */ + /* Remove fdset passed to qemu and restore max migration bandwidth */ if (qemuDomainObjIsActive(vm)) { + if (qemuDomainObjEnterMonitorAsync(vm, asyncJob) =3D=3D 0) { + qemuFDPass *fdPass =3D + qemuFDPassNewFromMonitor("libvirt-outgoing-migrate", priv-= >mon); + + if (fdPass) + qemuFDPassTransferMonitorRollback(fdPass, priv->mon); + qemuDomainObjExitMonitor(vm); + } + if (qemuMigrationParamsSetULL(migParams, QEMU_MIGRATION_PARAM_MAX_BANDWIDTH, saveMigBandwidth * 1024 * 1024) =3D= =3D 0) @@ -7182,13 +7248,6 @@ qemuMigrationSrcToFile(virQEMUDriver *driver, virDom= ainObj *vm, priv->migMaxBandwidth =3D saveMigBandwidth; } =20 - VIR_FORCE_CLOSE(pipeFD[0]); - VIR_FORCE_CLOSE(pipeFD[1]); - if (errbuf) { - VIR_DEBUG("Compression binary stderr: %s", NULLSTR(errbuf)); - VIR_FREE(errbuf); - } - virErrorRestore(&orig_err); =20 return ret; diff --git a/src/qemu/qemu_migration.h b/src/qemu/qemu_migration.h index efe1b9e88a..9fa007b949 100644 --- a/src/qemu/qemu_migration.h +++ b/src/qemu/qemu_migration.h @@ -238,8 +238,10 @@ qemuMigrationSrcIsAllowed(virDomainObj *vm, int qemuMigrationSrcToFile(virQEMUDriver *driver, virDomainObj *vm, - int fd, + int *fd, virCommand *compressor, + qemuMigrationParams *migParams, + unsigned int flags, virDomainAsyncJob asyncJob) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT; =20 diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 830ecbad1c..e2043c0120 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -2232,6 +2232,40 @@ qemuMonitorMigrateToFd(qemuMonitor *mon, } =20 =20 +int +qemuMonitorMigrateToFdSet(virDomainObj *vm, + unsigned int flags, + int *fd) +{ + qemuDomainObjPrivate *priv =3D vm->privateData; + qemuMonitor *mon =3D priv->mon; + off_t offset; + g_autoptr(qemuFDPass) fdPassMigrate =3D NULL; + g_autofree char *uri =3D NULL; + int ret; + + VIR_DEBUG("fd=3D%d flags=3D0x%x", *fd, flags); + + QEMU_CHECK_MONITOR(mon); + + if ((offset =3D lseek(*fd, 0, SEEK_CUR)) =3D=3D -1) { + virReportSystemError(errno, + "%s", _("failed to seek on file descriptor")); + return -1; + } + + fdPassMigrate =3D qemuFDPassNew("libvirt-outgoing-migrate", priv); + qemuFDPassAddFD(fdPassMigrate, fd, "-fd"); + qemuFDPassTransferMonitor(fdPassMigrate, mon); + + uri =3D g_strdup_printf("file:%s,offset=3D%#lx", + qemuFDPassGetPath(fdPassMigrate), offset); + ret =3D qemuMonitorJSONMigrate(mon, flags, uri); + + return ret; +} + + int qemuMonitorMigrateToHost(qemuMonitor *mon, unsigned int flags, diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 072f452e79..6da380aa65 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -859,6 +859,10 @@ int qemuMonitorMigrateToFd(qemuMonitor *mon, unsigned int flags, int fd); =20 +int qemuMonitorMigrateToFdSet(virDomainObj *vm, + unsigned int flags, + int *fd); + int qemuMonitorMigrateToHost(qemuMonitor *mon, unsigned int flags, const char *protocol, diff --git a/src/qemu/qemu_saveimage.c b/src/qemu/qemu_saveimage.c index 59237cc46a..0ffbe03f24 100644 --- a/src/qemu/qemu_saveimage.c +++ b/src/qemu/qemu_saveimage.c @@ -430,6 +430,7 @@ qemuSaveImageCreateFd(virQEMUDriver *driver, virDomainObj *vm, const char *path, virFileWrapperFd *wrapperFd, + bool sparse, bool *needUnlink, unsigned int flags) { @@ -439,7 +440,7 @@ qemuSaveImageCreateFd(virQEMUDriver *driver, int directFlag =3D 0; unsigned int wrapperFlags =3D VIR_FILE_WRAPPER_NON_BLOCKING; =20 - if (flags & VIR_DOMAIN_SAVE_BYPASS_CACHE) { + if (!sparse && flags & VIR_DOMAIN_SAVE_BYPASS_CACHE) { wrapperFlags |=3D VIR_FILE_WRAPPER_BYPASS_CACHE; directFlag =3D virFileDirectFdFlag(); if (directFlag < 0) { @@ -459,7 +460,7 @@ qemuSaveImageCreateFd(virQEMUDriver *driver, if (qemuSecuritySetImageFDLabel(driver->securityManager, vm->def, fd) = < 0) return -1; =20 - if (!(wrapperFd =3D virFileWrapperFdNew(&fd, path, wrapperFlags))) + if (!sparse && !(wrapperFd =3D virFileWrapperFdNew(&fd, path, wrapperF= lags))) return -1; =20 ret =3D fd; @@ -478,6 +479,7 @@ qemuSaveImageCreate(virQEMUDriver *driver, const char *path, virQEMUSaveData *data, virCommand *compressor, + qemuMigrationParams *saveParams, unsigned int flags, virDomainAsyncJob asyncJob) { @@ -486,9 +488,10 @@ qemuSaveImageCreate(virQEMUDriver *driver, int ret =3D -1; int fd =3D -1; virFileWrapperFd *wrapperFd =3D NULL; + bool sparse =3D data->header.format =3D=3D QEMU_SAVE_FORMAT_SPARSE; =20 /* Obtain the file handle. */ - fd =3D qemuSaveImageCreateFd(driver, vm, path, wrapperFd, &needUnlink,= flags); + fd =3D qemuSaveImageCreateFd(driver, vm, path, wrapperFd, sparse, &nee= dUnlink, flags); =20 if (fd < 0) goto cleanup; @@ -497,7 +500,7 @@ qemuSaveImageCreate(virQEMUDriver *driver, goto cleanup; =20 /* Perform the migration */ - if (qemuMigrationSrcToFile(driver, vm, fd, compressor, asyncJob) < 0) + if (qemuMigrationSrcToFile(driver, vm, &fd, compressor, saveParams, fl= ags, asyncJob) < 0) goto cleanup; =20 /* Touch up file header to mark image complete. */ @@ -505,14 +508,18 @@ qemuSaveImageCreate(virQEMUDriver *driver, /* Reopen the file to touch up the header, since we aren't set * up to seek backwards on wrapperFd. The reopened fd will * trigger a single page of file system cache pollution, but - * that's acceptable. */ - if (VIR_CLOSE(fd) < 0) { - virReportSystemError(errno, _("unable to close %1$s"), path); - goto cleanup; - } + * that's acceptable. + * If using mapped-ram, the fd was passed to qemu, so no need + * to close it. */ + if (!sparse) { + if (VIR_CLOSE(fd) < 0) { + virReportSystemError(errno, _("unable to close %1$s"), path); + goto cleanup; + } =20 - if (qemuDomainFileWrapperFDClose(vm, wrapperFd) < 0) - goto cleanup; + if (qemuDomainFileWrapperFDClose(vm, wrapperFd) < 0) + goto cleanup; + } =20 if ((fd =3D qemuDomainOpenFile(cfg, vm->def, path, O_WRONLY, NULL)) < = 0 || virQEMUSaveDataFinish(data, &fd, path) < 0) @@ -569,8 +576,8 @@ qemuSaveImageGetCompressionProgram(const char *imageFor= mat, if ((ret =3D qemuSaveFormatTypeFromString(imageFormat)) < 0) goto error; =20 - if (ret =3D=3D QEMU_SAVE_FORMAT_RAW) - return QEMU_SAVE_FORMAT_RAW; + if (ret =3D=3D QEMU_SAVE_FORMAT_RAW || ret =3D=3D QEMU_SAVE_FORMAT_SPA= RSE) + return ret; =20 if (!(prog =3D virFindFileInPath(imageFormat))) goto error; diff --git a/src/qemu/qemu_saveimage.h b/src/qemu/qemu_saveimage.h index a5b55c6b10..2b3d839e5b 100644 --- a/src/qemu/qemu_saveimage.h +++ b/src/qemu/qemu_saveimage.h @@ -138,6 +138,7 @@ qemuSaveImageCreate(virQEMUDriver *driver, const char *path, virQEMUSaveData *data, virCommand *compressor, + qemuMigrationParams *saveParams, unsigned int flags, virDomainAsyncJob asyncJob); =20 diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c index ed140dd41c..3088b28716 100644 --- a/src/qemu/qemu_snapshot.c +++ b/src/qemu/qemu_snapshot.c @@ -1644,6 +1644,8 @@ qemuSnapshotCreateActiveExternal(virQEMUDriver *drive= r, =20 /* do the memory snapshot if necessary */ if (memory) { + g_autoptr(qemuMigrationParams) snap_params =3D NULL; + /* check if migration is possible */ if (!qemuMigrationSrcIsAllowed(vm, false, VIR_ASYNC_JOB_SNAPSHOT, = 0)) goto cleanup; @@ -1661,6 +1663,13 @@ qemuSnapshotCreateActiveExternal(virQEMUDriver *driv= er, "snapshot", false= )) < 0) goto cleanup; =20 + if (format =3D=3D QEMU_SAVE_FORMAT_SPARSE) { + virReportError(VIR_ERR_OPERATION_FAILED, + _("Snapshots do not support image format %1$s"), + qemuSaveFormatTypeToString(format)); + goto cleanup; + } + if (!(xml =3D qemuDomainDefFormatLive(driver, priv->qemuCaps, vm->def, priv->origCPU, true, true)) || @@ -1675,8 +1684,11 @@ qemuSnapshotCreateActiveExternal(virQEMUDriver *driv= er, =20 memory_existing =3D virFileExists(snapdef->memorysnapshotfile); =20 + if (!(snap_params =3D qemuMigrationParamsNew())) + goto cleanup; + if ((ret =3D qemuSaveImageCreate(driver, vm, snapdef->memorysnapsh= otfile, - data, compressor, 0, + data, compressor, snap_params, 0, VIR_ASYNC_JOB_SNAPSHOT)) < 0) goto cleanup; =20 --=20 2.43.0 From nobody Fri Dec 19 18:47:07 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1738953816; cv=none; d=zohomail.com; s=zohoarc; b=MuRrz/nADQRotXqJFIix0HA+GeVUiLMqM14avk0D8/0k1zIR3f1XnX5HhjRdlIO3lfUm8cdUGD6yh2c+KXUfQjhC0NugXpWVm2UopnxD2keGsKxZq+iGZL4zHCE78kMfDmdyCvjwpWGiWA+wVAROWI+C+s2yXKVmuNlsXIu5gpg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1738953816; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id; bh=UKsObV2gvbQpwmstReiNdfhQNbrB+Q4dmxS2ZWo4A5I=; b=k2uYS+H2S6hfi7tATf3yO9puv/H8M9pA7cuYIHYhZSPhC46iEXfpP48ZUqeV7PglJ2SHVvdrkvdoEGFTNeVOt5SySJqVPStD7TLK8Km+lXiu9Ml8iBiKMdoJc9d44dBhFjcHgPPZDlhfWG3TUWLirQjTz3Rq8mTC69s5Xyp/t5k= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1738953816610115.29722134914141; Fri, 7 Feb 2025 10:43:36 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 9760E164F; Fri, 7 Feb 2025 13:43:35 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id AA968180C; Fri, 7 Feb 2025 13:38:26 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id BFB1E14D0; Fri, 7 Feb 2025 13:38:14 -0500 (EST) Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 8B87614D0 for ; Fri, 7 Feb 2025 13:37:58 -0500 (EST) Received: by mail-wr1-f51.google.com with SMTP id ffacd0b85a97d-385dece873cso1088072f8f.0 for ; Fri, 07 Feb 2025 10:37:58 -0800 (PST) Received: from localhost (205-201-32-8.scinternet.net. [205.201.32.8]) by smtp.gmail.com with UTF8SMTPSA id 98e67ed59e1d1-2fa099f5c06sm3601079a91.2.2025.02.07.10.37.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 10:37:56 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1738953477; x=1739558277; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=H7N2jGtHTpcqwfC+9FMuvtFBHvtlIkwkpfyHC5ELiPs=; b=EOMHWDhTlm2F9ICjN5ag9rYt+fo7bnk2Tn/SDCD/PIB8QcutPyQ2z9Egb7ZL9nRJPi d4A88mBuwabs8k43xwgKproc6kL6LRDHuUlMC6lOtSEXrdiLxfLGX9ljmSlBPIzUw4B3 o3lASb40XxMpvODCLHpO3OIwB8D+nF99HGHDdNrZ8zUAW5frCZayLyYeE44/YUa48VZj 71iL0qH4mca3Z4nUXM0fEcFAwJr9KjW3Cf9FBApqOvOzVwdkaP/7V4WU91T5bn/qlRQb 3BCRHmIMpSyqM6baReSb8rypSbxPGtgTMEgrzfgwQdJOmZt6oaDzI1gj1ngqZCMIvo3t BbJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738953477; x=1739558277; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=H7N2jGtHTpcqwfC+9FMuvtFBHvtlIkwkpfyHC5ELiPs=; b=ANKV0JEf/7oSaqbxsSxYulV71AqQXblQG8JtuoVwQvYN3XfTBwPvaTQ7cq7EK6hS6T /cwQrS+5Qy8yHF93HBzU9OWccWFjqv3UBDHqKf3a3aBQUrlOsiB466D4ubASTuyl4fsv ESLDgkEI25Z/vhaKXnPcFd60rkyzYHYtrZThcc7TjbhrJjlkbYVfQtKsm43GS+szZdIy pDg6M/bMIsoaWqCTeYr6UJNN8hqyoEBFjuoMAIe84k2g54YAJYRig4iq7PO8zUWxdcCT xBfggDboscPGFqPMkzq939vfjVrYWi8nNghAfuGaHIq3eqSj5jUBCwBk7lztTmiog2fG LMiQ== X-Gm-Message-State: AOJu0Yw5jf2VqJ93bscQhlEHfAxu+eljKboO4SrVMKxBcMvzP61sJ5Ds q9/ZhhbwrcrkI+D0GiKIyR/wXWo/hep0AbZr5W/jiGKhwueNEe3GXIUBJhLBbBGC0bmwzwQ1Yop 9 X-Gm-Gg: ASbGncs2ztuzSYzNQ1FvQQPJu/m8bKHj4PfZ7VFcruBP2icdLIpJVEVP4rAjUSiMqSr 8FpM+bsKYi6kB1/WVrOYp4AxN66opjSNYKUmIPSuBwaAcKPc1zSge/HZJDH83cVqlMCP0DFkHX1 hkVxz0iqRDbs6OUz/Mi0ktYW7+8aYWqzsfuk9ui3jKN0EkdXjN75tWCaHSmwKJ6As25MlXzdC9Z 3CMmcWaIp4qwVyHMLEfltqk9bzDplvBuiGTwGpL1CWR2rk7P/KTOwJ+DtL8FVxIlXzhbfBgh3XJ u/KCPwU7FqnXO+CX00X4UrYLNQLWaQRByg== X-Google-Smtp-Source: AGHT+IHDykTxdQ0uJm2kXnSPKD2k2OxUPSjMLUFKwtaM5H9ucaMjN4406xwj2Vblv6UiTZzP1OPIAQ== X-Received: by 2002:a5d:5985:0:b0:385:e30a:e0f7 with SMTP id ffacd0b85a97d-38dc932dd45mr2767285f8f.22.1738953477320; Fri, 07 Feb 2025 10:37:57 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V3 11/19] qemu: Move creation of qemuProcessIncomingDef struct Date: Fri, 7 Feb 2025 11:27:22 -0700 Message-ID: <20250207183730.21686-12-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250207183730.21686-1-jfehlig@suse.com> References: <20250207183730.21686-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: VGZQDKBQJYYL7QWIF6MCEUP7J3JSWP23 X-Message-ID-Hash: VGZQDKBQJYYL7QWIF6MCEUP7J3JSWP23 X-MailFrom: jfehlig@suse.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: farosas@suse.de X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Jim Fehlig via Devel Reply-To: Jim Fehlig X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1738953817827019100 Content-Type: text/plain; charset="utf-8" qemuProcessStartWithMemoryState() is the only caller of qemuProcessStart() that uses the qemuProcessIncomingDef struct. Move creation of the struct to qemuProcessStartWithMemoryState(). Signed-off-by: Jim Fehlig --- src/qemu/qemu_process.c | 42 ++++++++++++++++++++--------------------- src/qemu/qemu_process.h | 2 +- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index d015285b0d..524b23fea8 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -8315,7 +8315,7 @@ qemuProcessStart(virConnectPtr conn, virDomainObj *vm, virCPUDef *updatedCPU, virDomainAsyncJob asyncJob, - const char *migrateFrom, + qemuProcessIncomingDef *incoming, int migrateFd, const char *migratePath, virDomainMomentObj *snapshot, @@ -8323,7 +8323,6 @@ qemuProcessStart(virConnectPtr conn, unsigned int flags) { qemuDomainObjPrivate *priv =3D vm->privateData; - qemuProcessIncomingDef *incoming =3D NULL; unsigned int stopFlags; bool relabel =3D false; bool relabelSavedState =3D false; @@ -8331,11 +8330,11 @@ qemuProcessStart(virConnectPtr conn, int rv; =20 VIR_DEBUG("conn=3D%p driver=3D%p vm=3D%p name=3D%s id=3D%d asyncJob=3D= %s " - "migrateFrom=3D%s migrateFd=3D%d migratePath=3D%s " + "incoming=3D%p migrateFd=3D%d migratePath=3D%s " "snapshot=3D%p vmop=3D%d flags=3D0x%x", conn, driver, vm, vm->def->name, vm->def->id, virDomainAsyncJobTypeToString(asyncJob), - NULLSTR(migrateFrom), migrateFd, NULLSTR(migratePath), + incoming, migrateFd, NULLSTR(migratePath), snapshot, vmop, flags); =20 virCheckFlagsGoto(VIR_QEMU_PROCESS_START_COLD | @@ -8344,20 +8343,13 @@ qemuProcessStart(virConnectPtr conn, VIR_QEMU_PROCESS_START_GEN_VMID | VIR_QEMU_PROCESS_START_RESET_NVRAM, cleanup); =20 - if (!migrateFrom && !snapshot) + if (!incoming && !snapshot) flags |=3D VIR_QEMU_PROCESS_START_NEW; =20 if (qemuProcessInit(driver, vm, updatedCPU, - asyncJob, !!migrateFrom, flags) < 0) + asyncJob, !!incoming, flags) < 0) goto cleanup; =20 - if (migrateFrom) { - incoming =3D qemuProcessIncomingDefNew(priv->qemuCaps, NULL, migra= teFrom, - migrateFd, migratePath); - if (!incoming) - goto stop; - } - if (qemuProcessPrepareDomain(driver, vm, flags) < 0) goto stop; =20 @@ -8410,14 +8402,13 @@ qemuProcessStart(virConnectPtr conn, qemuSecurityRestoreSavedStateLabel(driver->securityManager, vm->def, migratePath) < 0) VIR_WARN("failed to restore save state label on %s", migratePath); - qemuProcessIncomingDefFree(incoming); return ret; =20 stop: stopFlags =3D 0; if (!relabel) stopFlags |=3D VIR_QEMU_PROCESS_STOP_NO_RELABEL; - if (migrateFrom) + if (incoming) stopFlags |=3D VIR_QEMU_PROCESS_STOP_MIGRATED; if (priv->mon) qemuMonitorSetDomainLog(priv->mon, NULL, NULL, NULL); @@ -8471,8 +8462,9 @@ qemuProcessStartWithMemoryState(virConnectPtr conn, VIR_AUTOCLOSE intermediatefd =3D -1; g_autoptr(virCommand) cmd =3D NULL; g_autofree char *errbuf =3D NULL; - const char *migrateFrom =3D NULL; + qemuProcessIncomingDef *incoming =3D NULL; int rc =3D 0; + int ret =3D -1; =20 if (data) { if (virSaveCookieParseString(data->cookie, (virObject **)&cookie, @@ -8483,10 +8475,15 @@ qemuProcessStartWithMemoryState(virConnectPtr conn, &errbuf, &cmd) < 0) { return -1; } - - migrateFrom =3D "stdio"; } =20 + /* The fd passed to qemuProcessIncomingDefNew is used to create the mi= gration + * URI, so it must be called after starting the decompression program. + */ + incoming =3D qemuProcessIncomingDefNew(priv->qemuCaps, NULL, "stdio", = *fd, path); + if (!incoming) + return -1; + /* No cookie means libvirt which saved the domain was too old to mess = up * the CPU definitions. */ @@ -8497,7 +8494,7 @@ qemuProcessStartWithMemoryState(virConnectPtr conn, priv->disableSlirp =3D true; =20 if (qemuProcessStart(conn, driver, vm, cookie ? cookie->cpu : NULL, - asyncJob, migrateFrom, *fd, path, snapshot, + asyncJob, incoming, *fd, path, snapshot, VIR_NETDEV_VPORT_PROFILE_OP_RESTORE, start_flags) =3D=3D 0) *started =3D true; @@ -8509,14 +8506,17 @@ qemuProcessStartWithMemoryState(virConnectPtr conn, =20 virDomainAuditStart(vm, reason, *started); if (!*started || rc < 0) - return -1; + goto cleanup; =20 /* qemuProcessStart doesn't unset the qemu error reporting infrastruct= ure * in case of migration (which is used in this case) so we need to res= et it * so that the handle to virtlogd is not held open unnecessarily */ qemuMonitorSetDomainLog(qemuDomainGetMonitor(vm), NULL, NULL, NULL); + ret =3D 0; =20 - return 0; + cleanup: + qemuProcessIncomingDefFree(incoming); + return ret; } =20 =20 diff --git a/src/qemu/qemu_process.h b/src/qemu/qemu_process.h index fee00ce53b..a9e0a03a21 100644 --- a/src/qemu/qemu_process.h +++ b/src/qemu/qemu_process.h @@ -83,7 +83,7 @@ int qemuProcessStart(virConnectPtr conn, virDomainObj *vm, virCPUDef *updatedCPU, virDomainAsyncJob asyncJob, - const char *migrateFrom, + qemuProcessIncomingDef *incoming, int stdin_fd, const char *stdin_path, virDomainMomentObj *snapshot, --=20 2.43.0 From nobody Fri Dec 19 18:47:07 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1738953783; cv=none; d=zohomail.com; s=zohoarc; b=RWhytbkS4qgoLWx25yjZt+kz1JcEl/u/HXIdqoT5UMBlaKlDv7L0TxPMHBVB2xbaZOHdg6EBlhacjVKJWpwMZaJATPp3hUcWJpqmQjSIo7gxiFoflVtYC5/K34PzgQxM/IC9iVCgAor8PemCRc8rld5c2E0HeAhoguFOeL7ycTM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1738953783; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id; bh=es9l4Jfgjb3aMUl1cdA6hqrBr6o00AWGK4yF5XhZWaw=; b=n/WBFq+0f1hQ67Kd5VcJGdwsxLTfjUbIR9k/lySBOJffDn9VTSv/REtDzhy+GUEDcKZbntFbm0qilW3hXLb3rYGm8LS2ctMiIEB08HzjmZAL8dicwoMkyd2PkP9bBPOlxJSOtO9NqATfOBIOZ+H/QU31y8pkiEWhoj7ORt+xr9o= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1738953783876460.06911140349143; Fri, 7 Feb 2025 10:43:03 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id E307817D3; Fri, 7 Feb 2025 13:43:02 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 72AC7174A; Fri, 7 Feb 2025 13:38:24 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id BD0171541; Fri, 7 Feb 2025 13:38:14 -0500 (EST) Received: from mail-wr1-f49.google.com (mail-wr1-f49.google.com [209.85.221.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id A2EB41541 for ; Fri, 7 Feb 2025 13:38:00 -0500 (EST) Received: by mail-wr1-f49.google.com with SMTP id ffacd0b85a97d-38a25d4b9d4so1188066f8f.0 for ; Fri, 07 Feb 2025 10:38:00 -0800 (PST) Received: from localhost (205-201-32-8.scinternet.net. [205.201.32.8]) by smtp.gmail.com with UTF8SMTPSA id 98e67ed59e1d1-2fa286ed9bcsm1733108a91.5.2025.02.07.10.37.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 10:37:59 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1738953479; x=1739558279; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=lVuAPhAsHdBxViacy1XrFT2fATVX1alu4PEgRzxtpPY=; b=QxJmrCi30L5VUVyusjmLzmBhTB58ZqFwXMJVqvh1FQ+KuNrbc81gIHBx3hcZdG9jdu j6E1kdF+ghyFJMocvLXflG3H9y6eUIwjL9meJ3rWKQYjU/h7xqxQoKSKhm0qJu7kEsZU YvxYKVI9vZ+JL8+rani/CKunKio1zMJbbqPkMz6Lnq3xxCu00hSW9zm0Ap+Q6xbtLMiR YLWyW1q4MBQ4LW1jbKYxdGfivhMDijiTp2llSnQqGhthG4egTQ96WLJfKwIkaclmHx7d LMJDKwIraQAuM6xVOzfTZisIoZ5YOhdJJjc+1rYF79d9sBrD6hVgRj2aIpJ/HAsBguzW LzDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738953479; x=1739558279; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=lVuAPhAsHdBxViacy1XrFT2fATVX1alu4PEgRzxtpPY=; b=lWSTXqrKgTpX1qI8K9nmWCR60RIQ9OsAi1CKYVCWx94cU8OH8oaObf2O7zzFZeTn3i WWTbOSF2WZxd6jJzwaaCjwUBPRrVDNR3rafwhHjzLknmKRWS1qTnr0u8dxCbqUZnH6o0 Ux8Nv1C/TCg+eioAoPqbzNjcDLzx++EIZtsycycRHc1CQaGQ90hi2kS+WtCN2GCtoRxF Hrd92XwayrTACDV9uxnQ7h/rqPFlXA7zjxFd47U4eFeN2q46DGQuLzVKwvNOA/R2iCi0 kJ87TnOstmbrWxIwYGASDvHyHKyYeDuy+NXhpFM6GBnXD1nUodxVKfec2/LtXILAFJZz UIFA== X-Gm-Message-State: AOJu0Yw+lp8add1PurudJH/UHUYCT0PisogqsQk81xX3/A1jJT6Driis ogpyAGo4l/+dxeqRWwfWPlrm1ZexOTIrvZkUCC+XmLeyXMfNr3tdmcmzQk5olVnUE2n+suf9+4N g X-Gm-Gg: ASbGnctk+2MRHK8MwbQX4Dlaep3s6GiZWHJmT0NJ/wOfKyhurB0HHw2ZT6A13O81I70 hTCFrgzOwDEBH5GvklLcg9arun/GJemGFeZicytrg5K38R7X9vnZM5n+VVJuYM9Jqp19A7HgVp+ LJIMBror7uIk4GkKeuUn2xHu/6pwyYnoMU5P3nlDLcjPoi0nAMk9tys8wt/YtXfdnaUwvQoyuh2 KmjPeYBJ6jpRQPFZl1O3OS76cdUPG+c+U4wEKhbNMHW3rBI7ix2i5BC654Czg6JFFvTAezW/W7e iRvk5cxlLZhB/uek4Coy1o7KWSnpti8lqQ== X-Google-Smtp-Source: AGHT+IEpmOOqjRDuvI1Z1pJIy3MTY6yoRl+ikQr3iLdwci8gGdHr4N03abiUshb3h10AJykwBG5ZzQ== X-Received: by 2002:a05:6000:1845:b0:38d:b807:b894 with SMTP id ffacd0b85a97d-38dc8dc35c3mr3250161f8f.18.1738953479515; Fri, 07 Feb 2025 10:37:59 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V3 12/19] qemu: Apply migration parameters in qemuMigrationDstRun Date: Fri, 7 Feb 2025 11:27:23 -0700 Message-ID: <20250207183730.21686-13-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250207183730.21686-1-jfehlig@suse.com> References: <20250207183730.21686-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: L6F3S6XFVJLQWRIE26POXIRTN7KDXV3X X-Message-ID-Hash: L6F3S6XFVJLQWRIE26POXIRTN7KDXV3X X-MailFrom: jfehlig@suse.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: farosas@suse.de X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Jim Fehlig via Devel Reply-To: Jim Fehlig X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1738953785601019100 Content-Type: text/plain; charset="utf-8" Similar to qemuMigrationSrcRun, apply migration parameters in qemuMigrationDstRun. This allows callers to create customized migration parameters, but delegates their application to the function performing the migration. Signed-off-by: Jim Fehlig --- src/qemu/qemu_migration.c | 16 ++++++++++------ src/qemu/qemu_migration.h | 5 ++++- src/qemu/qemu_process.c | 2 +- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 1e3bee3781..bd46143717 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2380,7 +2380,10 @@ qemuMigrationDstGetURI(const char *migrateFrom, int qemuMigrationDstRun(virDomainObj *vm, const char *uri, - virDomainAsyncJob asyncJob) + virDomainAsyncJob asyncJob, + qemuMigrationParams *migParams, + unsigned int flags) + { virTristateBool exitOnError =3D VIR_TRISTATE_BOOL_ABSENT; qemuDomainObjPrivate *priv =3D vm->privateData; @@ -2388,6 +2391,10 @@ qemuMigrationDstRun(virDomainObj *vm, =20 VIR_DEBUG("Setting up incoming migration with URI %s", uri); =20 + if (migParams && qemuMigrationParamsApply(vm, asyncJob, + migParams, flags) < 0) + return -1; + /* Ask QEMU not to exit on failure during incoming migration (if suppo= rted) * so that we can properly check and report error during Finish phase. */ @@ -3321,10 +3328,6 @@ qemuMigrationDstPrepareActive(virQEMUDriver *driver, goto error; } =20 - if (qemuMigrationParamsApply(vm, VIR_ASYNC_JOB_MIGRATION_IN, - migParams, flags) < 0) - goto error; - if (mig->nbd && flags & (VIR_MIGRATE_NON_SHARED_DISK | VIR_MIGRATE_NON_SHARED_INC)= ) { const char *nbdTLSAlias =3D NULL; @@ -3356,7 +3359,8 @@ qemuMigrationDstPrepareActive(virQEMUDriver *driver, } =20 if (qemuMigrationDstRun(vm, incoming->uri, - VIR_ASYNC_JOB_MIGRATION_IN) < 0) + VIR_ASYNC_JOB_MIGRATION_IN, + migParams, flags) < 0) goto error; =20 if (qemuProcessFinishStartup(driver, vm, VIR_ASYNC_JOB_MIGRATION_IN, diff --git a/src/qemu/qemu_migration.h b/src/qemu/qemu_migration.h index 9fa007b949..71a9974753 100644 --- a/src/qemu/qemu_migration.h +++ b/src/qemu/qemu_migration.h @@ -283,7 +283,10 @@ qemuMigrationDstGetURI(const char *migrateFrom, int qemuMigrationDstRun(virDomainObj *vm, const char *uri, - virDomainAsyncJob asyncJob); + virDomainAsyncJob asyncJob, + qemuMigrationParams *migParams, + unsigned int flags); + =20 void qemuMigrationSrcPostcopyFailed(virDomainObj *vm); diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 524b23fea8..063033cb95 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -8372,7 +8372,7 @@ qemuProcessStart(virConnectPtr conn, relabel =3D true; =20 if (incoming) { - if (qemuMigrationDstRun(vm, incoming->uri, asyncJob) < 0) + if (qemuMigrationDstRun(vm, incoming->uri, asyncJob, NULL, 0) < 0) goto stop; } else { /* Refresh state of devices from QEMU. During migration this happe= ns --=20 2.43.0 From nobody Fri Dec 19 18:47:07 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1738953857; cv=none; d=zohomail.com; s=zohoarc; b=gEgBfG2JC+UAqfRQA8IiUml90WJZZheRdyGZF/17L4CMXk9ceYAqmlkEr7nyAxqF+OPVEHbJ8/ooyBiCnuga/9x5DF4iQp8OaidLUp+UHmgR9S7Bs7a/tsnHf8FQF52z8QSATafONPSCoHVyCZwKgNBLsc4AdaIfxxDXVaKcNWg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1738953857; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id; bh=yChJIgLdybjrdt/Os460a4aC34nSSXchfnJBgXqBu5s=; b=PeuAbXeAaiMk3vMVxBLHCNWTKyGZbOa2m2WiGxuILf4O8Vhv4wwfZTb+dHjzQQxziMb8w7+aGmeM+S5ib6Ws7o53ro7Ct9JS9d4Ca7iZU2EbTakMTLoP95EVXndfTT9mRmk50cL0X7jMjeHpmgA9NXw3YUBGKrbKSH3yIIA5Mz4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 173895385750352.68008803501789; Fri, 7 Feb 2025 10:44:17 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id C506F1273; Fri, 7 Feb 2025 13:44:16 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id ED06E155A; Fri, 7 Feb 2025 13:38:29 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 518CF14DC; Fri, 7 Feb 2025 13:38:23 -0500 (EST) Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 05CCE15B6 for ; Fri, 7 Feb 2025 13:38:02 -0500 (EST) Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-437a92d7b96so23770595e9.2 for ; Fri, 07 Feb 2025 10:38:02 -0800 (PST) Received: from localhost (205-201-32-8.scinternet.net. [205.201.32.8]) by smtp.gmail.com with UTF8SMTPSA id d9443c01a7336-21f368797c8sm33896645ad.159.2025.02.07.10.38.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 10:38:01 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1738953482; x=1739558282; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=99FVTu95f+W7UdSZcAnOGoXIiQ1T90Q5T50dCAW6axM=; b=gA6JYTkKY6tZRmwZuvhwp0VmXE1tmPRsKL1GckxwetLZIiXAndKFi31v0lwRnXtBmw Ck5nrmR1i+kW+GO7GtDrSyfw4x1A9Npr6WcWinrbZqx0vaZWzej6rVDsUtMqNdZfgKw7 GkWRAijacBKzX2jA5IDnDVlJoc1n9L5oltAfmX87/B5D9oLMX5SVKA0X+f55wGHFcgg5 SWSb31X1mFfUMqoorBcrHPbTKSrggMSZSz63FtNYskuFZ/n/IWHhBN0wHNXJcoUy0B3V Vwjc/zQRyhYdlxntH0f2XVXtnf8taB7un/nc4fxS1DzX5GfSCIk8gnkUlwLngObNB+sW 05EQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738953482; x=1739558282; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=99FVTu95f+W7UdSZcAnOGoXIiQ1T90Q5T50dCAW6axM=; b=boVGPI4xotRVP9jORP66pxpcoWQTr00rRelBYJ9NFbIZXKjGVcBQ2d5esOD7Xs2ufK HzP2+U4BfQGI3iB2o0TBfTy63p0dQkvMD0NNG/ty0V7k91ySBugGoDdgZaKkyEu+vGVq mCm2y6vFDfnm5SOoV1xQd8fTLEVGlk/MBk7twCqvb3lJKJlHEYgsRhvK05siAn0A/5j2 mviFfdUhbfZ2jAPGnrurVhCndKIFpMyptRBD+JJHBZjEadtCgAID1EIfil0cbWG/wNYP zagKSOJ18Bo2/VYTyI/iEjdyfhXGZgz4FmhPe+00JPa3LUeJ8uJ8tLsG1fvRTkJZ55XA XNWA== X-Gm-Message-State: AOJu0YyoaXaZ8GLJxyaXzrIkLIZDtmcLUmMjF7hJF0gOueB6GcT3gG6n fdGMgJYPbdun4WLEy58okU12lQV4m7WOoigvLbDDARFl/cPuE85t8EF3i8bP10rfNxHUyx1eSq+ a X-Gm-Gg: ASbGncsjcPdIdYccdG0kKYcLtrLLhojc30c25kfRHsqQSJ/OxLPilg8813AJ/LaaM7V IH41eQoyGoMxRYBYFCQWcmxLnkQt5dQZYxAE7MDBXqdmcRXjT5jONyEpPB8oiGNu4PVHI7Z2os1 MV770uRfObni4gwMynYTsjL2PKGiRHO3bmRDi5S2lBHGJqQhElJokNdaMPSxH7TvMGnL4K06LZm iBSyRHWNBCs+TJECpyvhsjA8V2T5zwgs4H678xtG/byKZenum7+e9IZJlaE8Wel2NhgcCdKc//e BAGr58w+oAf0rcmwqJggoDTxaZIvCToj0A== X-Google-Smtp-Source: AGHT+IE0k1jUwokECdzHVClizP39/kA3k9acJ+XoTuwKPBzoMgs7niPQJJg7ZzVm7iwT2DegP4HyCA== X-Received: by 2002:a05:6000:1549:b0:38d:d0ca:fbad with SMTP id ffacd0b85a97d-38dd0cb7163mr1074110f8f.14.1738953481758; Fri, 07 Feb 2025 10:38:01 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V3 13/19] qemu: Add support for mapped-ram on restore Date: Fri, 7 Feb 2025 11:27:24 -0700 Message-ID: <20250207183730.21686-14-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250207183730.21686-1-jfehlig@suse.com> References: <20250207183730.21686-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 3RA67XCDSJPJJVC7FLZR7NMMKH4MITWK X-Message-ID-Hash: 3RA67XCDSJPJJVC7FLZR7NMMKH4MITWK X-MailFrom: jfehlig@suse.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: farosas@suse.de X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Jim Fehlig via Devel Reply-To: Jim Fehlig X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1738953859191019000 Content-Type: text/plain; charset="utf-8" Add support for the mapped-ram migration capability on restore. Signed-off-by: Jim Fehlig --- src/qemu/qemu_driver.c | 27 +++++++++++++++++++------- src/qemu/qemu_migration.c | 12 ++++++------ src/qemu/qemu_process.c | 41 ++++++++++++++++++++++++++++----------- src/qemu/qemu_process.h | 15 +++++++++----- src/qemu/qemu_saveimage.c | 29 ++++++++++++++++----------- src/qemu/qemu_saveimage.h | 2 ++ src/qemu/qemu_snapshot.c | 8 ++++---- 7 files changed, 90 insertions(+), 44 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index f77516a4f4..0f363849ba 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -1614,7 +1614,7 @@ static virDomainPtr qemuDomainCreateXML(virConnectPtr= conn, } =20 if (qemuProcessStart(conn, driver, vm, NULL, VIR_ASYNC_JOB_START, - NULL, -1, NULL, NULL, + NULL, -1, NULL, NULL, NULL, VIR_NETDEV_VPORT_PROFILE_OP_CREATE, start_flags) < 0) { virDomainAuditStart(vm, "booted", false); @@ -5783,6 +5783,8 @@ qemuDomainRestoreInternal(virConnectPtr conn, virFileWrapperFd *wrapperFd =3D NULL; bool hook_taint =3D false; bool reset_nvram =3D false; + bool sparse =3D false; + g_autoptr(qemuMigrationParams) restoreParams =3D NULL; =20 virCheckFlags(VIR_DOMAIN_SAVE_BYPASS_CACHE | VIR_DOMAIN_SAVE_RUNNING | @@ -5795,9 +5797,13 @@ qemuDomainRestoreInternal(virConnectPtr conn, if (qemuSaveImageGetMetadata(driver, NULL, path, &def, &data) < 0) goto cleanup; =20 + sparse =3D data->header.format =3D=3D QEMU_SAVE_FORMAT_SPARSE; + if (!(restoreParams =3D qemuMigrationParamsForSave(sparse))) + goto cleanup; + fd =3D qemuSaveImageOpen(driver, path, (flags & VIR_DOMAIN_SAVE_BYPASS_CACHE) !=3D 0, - &wrapperFd, false); + sparse, &wrapperFd, false); if (fd < 0) goto cleanup; =20 @@ -5851,7 +5857,7 @@ qemuDomainRestoreInternal(virConnectPtr conn, if (qemuProcessBeginJob(vm, VIR_DOMAIN_JOB_OPERATION_RESTORE, flags) <= 0) goto cleanup; =20 - ret =3D qemuSaveImageStartVM(conn, driver, vm, &fd, data, path, + ret =3D qemuSaveImageStartVM(conn, driver, vm, &fd, data, path, restor= eParams, false, reset_nvram, VIR_ASYNC_JOB_START); =20 qemuProcessEndJob(vm); @@ -5966,7 +5972,8 @@ qemuDomainSaveImageDefineXML(virConnectPtr conn, cons= t char *path, if (qemuSaveImageGetMetadata(driver, NULL, path, &def, &data) < 0) goto cleanup; =20 - fd =3D qemuSaveImageOpen(driver, path, 0, NULL, false); + fd =3D qemuSaveImageOpen(driver, path, 0, false, NULL, false); + if (fd < 0) goto cleanup; =20 @@ -6105,6 +6112,8 @@ qemuDomainObjRestore(virConnectPtr conn, g_autofree char *xmlout =3D NULL; virQEMUSaveData *data =3D NULL; virFileWrapperFd *wrapperFd =3D NULL; + bool sparse =3D false; + g_autoptr(qemuMigrationParams) restoreParams =3D NULL; =20 ret =3D qemuSaveImageGetMetadata(driver, NULL, path, &def, &data); if (ret < 0) { @@ -6122,7 +6131,11 @@ qemuDomainObjRestore(virConnectPtr conn, goto cleanup; } =20 - fd =3D qemuSaveImageOpen(driver, path, bypass_cache, &wrapperFd, false= ); + sparse =3D data->header.format =3D=3D QEMU_SAVE_FORMAT_SPARSE; + if (!(restoreParams =3D qemuMigrationParamsForSave(sparse))) + return -1; + + fd =3D qemuSaveImageOpen(driver, path, bypass_cache, sparse, &wrapperF= d, false); if (fd < 0) goto cleanup; =20 @@ -6164,7 +6177,7 @@ qemuDomainObjRestore(virConnectPtr conn, =20 virDomainObjAssignDef(vm, &def, true, NULL); =20 - ret =3D qemuSaveImageStartVM(conn, driver, vm, &fd, data, path, + ret =3D qemuSaveImageStartVM(conn, driver, vm, &fd, data, path, restor= eParams, start_paused, reset_nvram, asyncJob); =20 cleanup: @@ -6370,7 +6383,7 @@ qemuDomainObjStart(virConnectPtr conn, } =20 ret =3D qemuProcessStart(conn, driver, vm, NULL, asyncJob, - NULL, -1, NULL, NULL, + NULL, -1, NULL, NULL, NULL, VIR_NETDEV_VPORT_PROFILE_OP_CREATE, start_flags= ); virDomainAuditStart(vm, "booted", ret >=3D 0); if (ret >=3D 0) { diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index bd46143717..9665b523af 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -3068,9 +3068,8 @@ qemuMigrationDstPrepare(virDomainObj *vm, const char *protocol, const char *listenAddress, unsigned short port, - int fd) + int *fd) { - qemuDomainObjPrivate *priv =3D vm->privateData; g_autofree char *migrateFrom =3D NULL; =20 if (tunnel) { @@ -3124,8 +3123,9 @@ qemuMigrationDstPrepare(virDomainObj *vm, migrateFrom =3D g_strdup_printf(incFormat, protocol, listenAddress= , port); } =20 - return qemuProcessIncomingDefNew(priv->qemuCaps, listenAddress, - migrateFrom, fd, NULL); + return qemuProcessIncomingDefNew(vm, listenAddress, + migrateFrom, fd, + NULL, NULL); } =20 =20 @@ -3267,7 +3267,7 @@ qemuMigrationDstPrepareActive(virQEMUDriver *driver, =20 if (!(incoming =3D qemuMigrationDstPrepare(vm, tunnel, protocol, listenAddress, port, - dataFD[0]))) + &dataFD[0]))) goto error; =20 qemuMigrationDstPrepareDiskSeclabels(vm, migrate_disks, flags); @@ -3638,7 +3638,7 @@ qemuMigrationDstPrepareResume(virQEMUDriver *driver, priv->origname =3D g_strdup(origname); =20 if (!(incoming =3D qemuMigrationDstPrepare(vm, false, protocol, - listenAddress, port, -1))) + listenAddress, port, NULL))) goto cleanup; =20 if (qemuDomainObjEnterMonitorAsync(vm, VIR_ASYNC_JOB_MIGRATION_IN) < 0) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 063033cb95..94e7e90d28 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4823,6 +4823,7 @@ qemuProcessIncomingDefFree(qemuProcessIncomingDef *in= c) =20 g_free(inc->address); g_free(inc->uri); + qemuFDPassFree(inc->fdPassMigrate); g_free(inc); } =20 @@ -4836,26 +4837,38 @@ qemuProcessIncomingDefFree(qemuProcessIncomingDef *= inc) * qemuProcessIncomingDefFree will NOT close it. */ qemuProcessIncomingDef * -qemuProcessIncomingDefNew(virQEMUCaps *qemuCaps, +qemuProcessIncomingDefNew(virDomainObj *vm, const char *listenAddress, const char *migrateFrom, - int fd, - const char *path) + int *fd, + const char *path, + virQEMUSaveData *data) { + qemuDomainObjPrivate *priv =3D vm->privateData; qemuProcessIncomingDef *inc =3D NULL; =20 - if (qemuMigrationDstCheckProtocol(qemuCaps, migrateFrom) < 0) + if (qemuMigrationDstCheckProtocol(priv->qemuCaps, migrateFrom) < 0) return NULL; =20 inc =3D g_new0(qemuProcessIncomingDef, 1); =20 inc->address =3D g_strdup(listenAddress); =20 - inc->uri =3D qemuMigrationDstGetURI(migrateFrom, fd); + if (data && data->header.format =3D=3D QEMU_SAVE_FORMAT_SPARSE) { + size_t offset =3D sizeof(virQEMUSaveHeader) + data->header.data_le= n; + + inc->fdPassMigrate =3D qemuFDPassNew("libvirt-incoming-migrate", p= riv); + qemuFDPassAddFD(inc->fdPassMigrate, fd, "-fd"); + inc->uri =3D g_strdup_printf("file:%s,offset=3D%#lx", + qemuFDPassGetPath(inc->fdPassMigrate), = offset); + } else { + inc->uri =3D qemuMigrationDstGetURI(migrateFrom, *fd); + } + if (!inc->uri) goto error; =20 - inc->fd =3D fd; + inc->fd =3D *fd; inc->path =3D path; =20 return inc; @@ -7899,8 +7912,11 @@ qemuProcessLaunch(virConnectPtr conn, &nnicindexes, &nicindexes))) goto cleanup; =20 - if (incoming && incoming->fd !=3D -1) - virCommandPassFD(cmd, incoming->fd, 0); + if (incoming) { + if (incoming->fd !=3D -1) + virCommandPassFD(cmd, incoming->fd, 0); + qemuFDPassTransferCommand(incoming->fdPassMigrate, cmd); + } =20 /* now that we know it is about to start call the hook if present */ if (qemuProcessStartHook(driver, vm, @@ -8319,6 +8335,7 @@ qemuProcessStart(virConnectPtr conn, int migrateFd, const char *migratePath, virDomainMomentObj *snapshot, + qemuMigrationParams *migParams, virNetDevVPortProfileOp vmop, unsigned int flags) { @@ -8372,7 +8389,7 @@ qemuProcessStart(virConnectPtr conn, relabel =3D true; =20 if (incoming) { - if (qemuMigrationDstRun(vm, incoming->uri, asyncJob, NULL, 0) < 0) + if (qemuMigrationDstRun(vm, incoming->uri, asyncJob, migParams, 0)= < 0) goto stop; } else { /* Refresh state of devices from QEMU. During migration this happe= ns @@ -8426,6 +8443,7 @@ qemuProcessStart(virConnectPtr conn, * @path: path to memory state file * @snapshot: internal snapshot to load when starting QEMU process or NULL * @data: data from memory state file or NULL + * @migParams: Migration params to use on restore or NULL * @asyncJob: type of asynchronous job * @start_flags: flags to start QEMU process with * @reason: audit log reason @@ -8452,6 +8470,7 @@ qemuProcessStartWithMemoryState(virConnectPtr conn, const char *path, virDomainMomentObj *snapshot, virQEMUSaveData *data, + qemuMigrationParams *migParams, virDomainAsyncJob asyncJob, unsigned int start_flags, const char *reason, @@ -8480,7 +8499,7 @@ qemuProcessStartWithMemoryState(virConnectPtr conn, /* The fd passed to qemuProcessIncomingDefNew is used to create the mi= gration * URI, so it must be called after starting the decompression program. */ - incoming =3D qemuProcessIncomingDefNew(priv->qemuCaps, NULL, "stdio", = *fd, path); + incoming =3D qemuProcessIncomingDefNew(vm, NULL, "stdio", fd, path, da= ta); if (!incoming) return -1; =20 @@ -8495,7 +8514,7 @@ qemuProcessStartWithMemoryState(virConnectPtr conn, =20 if (qemuProcessStart(conn, driver, vm, cookie ? cookie->cpu : NULL, asyncJob, incoming, *fd, path, snapshot, - VIR_NETDEV_VPORT_PROFILE_OP_RESTORE, + migParams, VIR_NETDEV_VPORT_PROFILE_OP_RESTORE, start_flags) =3D=3D 0) *started =3D true; =20 diff --git a/src/qemu/qemu_process.h b/src/qemu/qemu_process.h index a9e0a03a21..c51335ad7a 100644 --- a/src/qemu/qemu_process.h +++ b/src/qemu/qemu_process.h @@ -53,14 +53,17 @@ struct _qemuProcessIncomingDef { char *address; /* address where QEMU is supposed to listen */ char *uri; /* used when calling migrate-incoming QMP command */ int fd; /* for fd:N URI */ + qemuFDPass *fdPassMigrate; /* for file:/dev/fdset/n,offset=3Dx URI */ const char *path; /* path associated with fd */ }; =20 -qemuProcessIncomingDef *qemuProcessIncomingDefNew(virQEMUCaps *qemuCaps, - const char *listenAddr= ess, - const char *migrateFro= m, - int fd, - const char *path); +qemuProcessIncomingDef *qemuProcessIncomingDefNew(virDomainObj *vm, + const char *listenAddres= s, + const char *migrateFrom, + int *fd, + const char *path, + virQEMUSaveData *data); + void qemuProcessIncomingDefFree(qemuProcessIncomingDef *inc); =20 int qemuProcessBeginJob(virDomainObj *vm, @@ -87,6 +90,7 @@ int qemuProcessStart(virConnectPtr conn, int stdin_fd, const char *stdin_path, virDomainMomentObj *snapshot, + qemuMigrationParams *migParams, virNetDevVPortProfileOp vmop, unsigned int flags); =20 @@ -97,6 +101,7 @@ int qemuProcessStartWithMemoryState(virConnectPtr conn, const char *path, virDomainMomentObj *snapshot, virQEMUSaveData *data, + qemuMigrationParams *migParams, virDomainAsyncJob asyncJob, unsigned int start_flags, const char *reason, diff --git a/src/qemu/qemu_saveimage.c b/src/qemu/qemu_saveimage.c index 0ffbe03f24..3f20ffd58c 100644 --- a/src/qemu/qemu_saveimage.c +++ b/src/qemu/qemu_saveimage.c @@ -348,7 +348,8 @@ qemuSaveImageDecompressionStart(virQEMUSaveData *data, if (header->version !=3D 2) return 0; =20 - if (header->format =3D=3D QEMU_SAVE_FORMAT_RAW) + if (header->format =3D=3D QEMU_SAVE_FORMAT_RAW || + header->format =3D=3D QEMU_SAVE_FORMAT_SPARSE) return 0; =20 if (!(cmd =3D qemuSaveImageGetCompressionCommand(header->format))) @@ -697,6 +698,7 @@ qemuSaveImageGetMetadata(virQEMUDriver *driver, * @driver: qemu driver data * @path: path of the save image * @bypass_cache: bypass cache when opening the file + * @sparse: Image contains mapped-ram save format * @wrapperFd: returns the file wrapper structure * @open_write: open the file for writing (for updates) * @@ -706,6 +708,7 @@ int qemuSaveImageOpen(virQEMUDriver *driver, const char *path, bool bypass_cache, + bool sparse, virFileWrapperFd **wrapperFd, bool open_write) { @@ -727,15 +730,18 @@ qemuSaveImageOpen(virQEMUDriver *driver, if ((fd =3D qemuDomainOpenFile(cfg, NULL, path, oflags, NULL)) < 0) return -1; =20 - if (bypass_cache && - !(*wrapperFd =3D virFileWrapperFdNew(&fd, path, - VIR_FILE_WRAPPER_BYPASS_CACHE))) - return -1; + /* If sparse, no need for the iohelper or positioning the file pointer= . */ + if (!sparse) { + if (bypass_cache && + !(*wrapperFd =3D virFileWrapperFdNew(&fd, path, + VIR_FILE_WRAPPER_BYPASS_CAC= HE))) + return -1; =20 - /* Read the header to position the file pointer for QEMU. Unfortunatel= y we - * can't use lseek with virFileWrapperFD. */ - if (qemuSaveImageReadHeader(fd, NULL) < 0) - return -1; + /* Read the header to position the file pointer for QEMU. Unfortun= ately we + * can't use lseek with virFileWrapperFD. */ + if (qemuSaveImageReadHeader(fd, NULL) < 0) + return -1; + } =20 ret =3D fd; fd =3D -1; @@ -751,6 +757,7 @@ qemuSaveImageStartVM(virConnectPtr conn, int *fd, virQEMUSaveData *data, const char *path, + qemuMigrationParams *restoreParams, bool start_paused, bool reset_nvram, virDomainAsyncJob asyncJob) @@ -767,8 +774,8 @@ qemuSaveImageStartVM(virConnectPtr conn, start_flags |=3D VIR_QEMU_PROCESS_START_RESET_NVRAM; =20 if (qemuProcessStartWithMemoryState(conn, driver, vm, fd, path, NULL, = data, - asyncJob, start_flags, "restored", - &started) < 0) { + restoreParams, asyncJob, start_fla= gs, + "restored", &started) < 0) { goto cleanup; } =20 diff --git a/src/qemu/qemu_saveimage.h b/src/qemu/qemu_saveimage.h index 2b3d839e5b..b3992de126 100644 --- a/src/qemu/qemu_saveimage.h +++ b/src/qemu/qemu_saveimage.h @@ -84,6 +84,7 @@ qemuSaveImageStartVM(virConnectPtr conn, int *fd, virQEMUSaveData *data, const char *path, + qemuMigrationParams *restoreParams, bool start_paused, bool reset_nvram, virDomainAsyncJob asyncJob) @@ -106,6 +107,7 @@ int qemuSaveImageOpen(virQEMUDriver *driver, const char *path, bool bypass_cache, + bool sparse, virFileWrapperFd **wrapperFd, bool open_write) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(4); diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c index 3088b28716..6f8ba5697b 100644 --- a/src/qemu/qemu_snapshot.c +++ b/src/qemu/qemu_snapshot.c @@ -2407,7 +2407,7 @@ qemuSnapshotRevertExternalPrepare(virDomainObj *vm, return -1; =20 memdata->fd =3D qemuSaveImageOpen(driver, memdata->path, - false, NULL, false); + false, false, NULL, false); if (memdata->fd < 0) return -1; =20 @@ -2647,7 +2647,7 @@ qemuSnapshotRevertActive(virDomainObj *vm, =20 if (qemuProcessStartWithMemoryState(snapshot->domain->conn, driver, vm, &memdata.fd, memdata.path, loadSna= p, - memdata.data, VIR_ASYNC_JOB_SNAPSH= OT, + memdata.data, NULL, VIR_ASYNC_JOB_= SNAPSHOT, start_flags, "from-snapshot", &started) < 0) { if (started) { @@ -2801,7 +2801,7 @@ qemuSnapshotRevertInactive(virDomainObj *vm, =20 rc =3D qemuProcessStart(snapshot->domain->conn, driver, vm, NULL, VIR_ASYNC_JOB_SNAPSHOT, NULL, -1, NULL, NULL, - VIR_NETDEV_VPORT_PROFILE_OP_CREATE, + NULL, VIR_NETDEV_VPORT_PROFILE_OP_CREATE, start_flags); virDomainAuditStart(vm, "from-snapshot", rc >=3D 0); if (rc < 0) { @@ -3277,7 +3277,7 @@ qemuSnapshotDeleteExternalPrepare(virDomainObj *vm, =20 if (!virDomainObjIsActive(vm)) { if (qemuProcessStart(NULL, driver, vm, NULL, VIR_ASYNC_JOB_SNA= PSHOT, - NULL, -1, NULL, NULL, + NULL, -1, NULL, NULL, NULL, VIR_NETDEV_VPORT_PROFILE_OP_CREATE, VIR_QEMU_PROCESS_START_PAUSED) < 0) { return -1; --=20 2.43.0 From nobody Fri Dec 19 18:47:07 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1738953890; cv=none; d=zohomail.com; s=zohoarc; b=C4ShwHcUyHy8sXWJXugi0RPU6vWBAAHiHQFPxK1o6nKYnbEWKpgG2oxsgV/2EbTSz8N78nr8KK19DPf72/JYBzwj7Cld804aVb7YBL/d2Ffr0eZYgefcULnAYx4ZL8tIS8cO0QQGfGoGNJunsVXdD1ZwaMaZOqNajv890hxbniQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1738953890; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id; bh=uFgXsFhLQbLt1FR1N6R+Dqdi6At3OfvVGuZd63JXBNE=; b=fFDsiXnchu8czIVHeGa79RsgvnVBVAQBbrQBBbhJTUdCiRdaXAeMhuqQ4C77LSaosf3o/hFhr6H6YlI8utHzm1+K5pX9TgmqWssZtdzHFa/BqCv+BAHztqkiIM/oANAANGczXh0N9pKp/674ziZpV6DulZXmcI8s/PduCyFJLaM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1738953889950702.167262763239; Fri, 7 Feb 2025 10:44:49 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 504461939; Fri, 7 Feb 2025 13:44:49 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id E10BF1613; Fri, 7 Feb 2025 13:38:31 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 0E4FC1531; Fri, 7 Feb 2025 13:38:24 -0500 (EST) Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 3AE771516 for ; Fri, 7 Feb 2025 13:38:05 -0500 (EST) Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-43625c4a50dso16424325e9.0 for ; Fri, 07 Feb 2025 10:38:05 -0800 (PST) Received: from localhost (205-201-32-8.scinternet.net. [205.201.32.8]) by smtp.gmail.com with UTF8SMTPSA id d2e1a72fcca58-73048c1634asm3444503b3a.147.2025.02.07.10.38.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 10:38:03 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1738953484; x=1739558284; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=YQSC1QcYlkGHVhDInXl9Hs65Nlm4+sBFCtKoPnFB4dA=; b=dht5cuxYnfZn0lwr/XhCpjMPUd8yKSWj4t2dzWQfd2RWPvkbqpt0xdTtSWlbJt4UCy BfjyrY/TYOhMEZQZ0reOWxnGrzIhPyt/9Y2kaLMgHTQX+o2IDwB8s+92yw5s0TUVBdRV bjDY1PhWDHE97qcH0Oj97W/spwpYZmz8f9d6NLWOdgF5yNsX/OccG2+3oI2RQ/mQM/TQ FOft33S9h9rARiIA76pabxBTKn/jEPebgZ4OWdGs2qZLoM1oalsDvnB3uFDxlJoFByKR 1Q/Ad4sznCrJg8soIW9XoPVLQEkDUr/MPew1A4f0LD3Dcd1Iga6dPMFNf4f33f8BRnNo 3ZFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738953484; x=1739558284; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YQSC1QcYlkGHVhDInXl9Hs65Nlm4+sBFCtKoPnFB4dA=; b=vq2IDmSMgu3yrhLTJJMxXF2z2J0vUWZprjixMaat4W3bGO6H/mR68iOZkOyCbRGt4T qgVeuGpwcU31qj/afvoziv6HoFC79BiLG7hW2sGaocrc/yzoh5p/9ILDiMJ7k/ietTcc A5Tz8/0hV8XMRJf0v3WCUWrPpufjlQOl8Ka/mwUGj2h7lFY/X+vPEnPl4t/lAn72o42d rkrThyE3rLGC/WmsUXTTEtFVU0BpNvX2J+BXnfjReHHxK4pQjBgHJU4z+JJrR3siG3/Q blNBAhnKJn6jtlSzJUYkaqHVGYrgwx4aQNtW+wNXDXnLhwYm6B1wWZWNocm52Iy+L8DJ B7ug== X-Gm-Message-State: AOJu0YwEJSI4LYPUoTsBEZH9h6DBrHNKr6FHsdfYPL2l/bIKKMxIEzGn axRnotzKuoFD2/12Tuoj8r9zqSdB64OauDJIwqdXcyp14QC678RzRJOuWO0Fds6oCMDZ2GkTuHo R X-Gm-Gg: ASbGncvlTiSLoVQicyjq1kol2IxFVCaSQKj0oE8jUN7nZPIx+ugkrlUqOLzXMjQFJq6 cdtgopYCMIrkKaK4LJfv70XNuX+Bq+IKajzdSfZqrA/HlM9Kz2XJRTTlOjE/yAuyBlkURj6XUky 9DJqOc2Nt2EL7AMCrn0vmRamePE3xjkS/YM+3arz9Prki7KRM8cfgNR6JQHeEk8Sids7WQNyNi2 BVQQusXO8NEMWZfc5K/xnDD1sTs0FYweZ1OYioc4I4Bq7aAr6sWNpQeLBmG/84QWhFl8RfEM4Ak SDXCruRT83M3k6ht7pFA2JVB9zsNCEtsOg== X-Google-Smtp-Source: AGHT+IFu1SV9guJxTXigzqyG30uqt66XXIEQCyhI2XzLvVdfQH0p1n7la18+cbCb0ALeE6lPeWEzMA== X-Received: by 2002:a5d:6d01:0:b0:38d:b998:a600 with SMTP id ffacd0b85a97d-38dc8dc3071mr2972888f8f.7.1738953483988; Fri, 07 Feb 2025 10:38:03 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V3 14/19] qemu: Support O_DIRECT with mapped-ram on save Date: Fri, 7 Feb 2025 11:27:25 -0700 Message-ID: <20250207183730.21686-15-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250207183730.21686-1-jfehlig@suse.com> References: <20250207183730.21686-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: POZNZI4FVBIUSTO7ZJYHFU5W2NJHKSMK X-Message-ID-Hash: POZNZI4FVBIUSTO7ZJYHFU5W2NJHKSMK X-MailFrom: jfehlig@suse.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: farosas@suse.de X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Jim Fehlig via Devel Reply-To: Jim Fehlig X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1738953891229019000 Content-Type: text/plain; charset="utf-8" When using the mapped-ram migration capability, direct IO is enabled by setting the "direct-io" migration parameter to "true" and passing QEMU an additional fd with O_DIRECT set. Signed-off-by: Jim Fehlig --- src/qemu/qemu_driver.c | 10 ++++++---- src/qemu/qemu_migration.c | 32 ++++++++++++++++++++++++++------ src/qemu/qemu_migration.h | 1 + src/qemu/qemu_migration_params.c | 11 ++++++++++- src/qemu/qemu_migration_params.h | 3 ++- src/qemu/qemu_monitor.c | 7 +++++-- src/qemu/qemu_monitor.h | 3 ++- src/qemu/qemu_saveimage.c | 2 +- 8 files changed, 53 insertions(+), 16 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 0f363849ba..ad15689eb8 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -2700,7 +2700,8 @@ qemuDomainSaveInternal(virQEMUDriver *driver, goto endjob; xml =3D NULL; =20 - if (!(saveParams =3D qemuMigrationParamsForSave(format =3D=3D QEMU_SAV= E_FORMAT_SPARSE))) + if (!(saveParams =3D qemuMigrationParamsForSave(format =3D=3D QEMU_SAV= E_FORMAT_SPARSE, + flags))) goto endjob; =20 ret =3D qemuSaveImageCreate(driver, vm, path, data, compressor, @@ -3152,7 +3153,7 @@ doCoreDump(virQEMUDriver *driver, if (!(dump_params =3D qemuMigrationParamsNew())) goto cleanup; =20 - if (qemuMigrationSrcToFile(driver, vm, &fd, compressor, + if (qemuMigrationSrcToFile(driver, vm, path, &fd, compressor, dump_params, dump_flags, VIR_ASYNC_JOB_= DUMP) < 0) goto cleanup; } @@ -5798,7 +5799,7 @@ qemuDomainRestoreInternal(virConnectPtr conn, goto cleanup; =20 sparse =3D data->header.format =3D=3D QEMU_SAVE_FORMAT_SPARSE; - if (!(restoreParams =3D qemuMigrationParamsForSave(sparse))) + if (!(restoreParams =3D qemuMigrationParamsForSave(sparse, flags))) goto cleanup; =20 fd =3D qemuSaveImageOpen(driver, path, @@ -6132,7 +6133,8 @@ qemuDomainObjRestore(virConnectPtr conn, } =20 sparse =3D data->header.format =3D=3D QEMU_SAVE_FORMAT_SPARSE; - if (!(restoreParams =3D qemuMigrationParamsForSave(sparse))) + if (!(restoreParams =3D qemuMigrationParamsForSave(sparse, + bypass_cache ? VIR_DO= MAIN_SAVE_BYPASS_CACHE : 0))) return -1; =20 fd =3D qemuSaveImageOpen(driver, path, bypass_cache, sparse, &wrapperF= d, false); diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 9665b523af..a5a80230b2 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -7139,17 +7139,36 @@ qemuMigrationSrcToLegacyFile(virQEMUDriver *driver, static int qemuMigrationSrcToSparseFile(virQEMUDriver *driver, virDomainObj *vm, + const char *path, int *fd, unsigned int flags, virDomainAsyncJob asyncJob) { + g_autoptr(virQEMUDriverConfig) cfg =3D virQEMUDriverGetConfig(driver); + VIR_AUTOCLOSE directFd =3D -1; + int directFlag =3D 0; + bool needUnlink =3D false; int ret; =20 - /* mapped-ram does not support directIO */ + /* When using directio with mapped-ram, qemu needs two fds. One with + * O_DIRECT set writing the memory, and another without it set for + * writing small bits of unaligned state. */ if ((flags & VIR_DOMAIN_SAVE_BYPASS_CACHE)) { - virReportError(VIR_ERR_OPERATION_FAILED, "%s", - _("bypass cache unsupported by this system")); - return -1; + directFlag =3D virFileDirectFdFlag(); + if (directFlag < 0) { + virReportError(VIR_ERR_OPERATION_FAILED, "%s", + _("bypass cache unsupported by this system")); + return -1; + } + directFd =3D virQEMUFileOpenAs(cfg->user, cfg->group, false, path, + O_WRONLY | directFlag, &needUnlink); + + if (directFd < 0) + return -1; + + if (qemuSecuritySetImageFDLabel(driver->securityManager, vm->def, = directFd) < 0) + return -1; + } =20 if (qemuSecuritySetImageFDLabel(driver->securityManager, vm->def, *fd)= < 0) @@ -7158,7 +7177,7 @@ qemuMigrationSrcToSparseFile(virQEMUDriver *driver, if (qemuDomainObjEnterMonitorAsync(vm, asyncJob) < 0) return -1; =20 - ret =3D qemuMonitorMigrateToFdSet(vm, 0, fd); + ret =3D qemuMonitorMigrateToFdSet(vm, 0, fd, &directFd); qemuDomainObjExitMonitor(vm); return ret; } @@ -7167,6 +7186,7 @@ qemuMigrationSrcToSparseFile(virQEMUDriver *driver, /* Helper function called while vm is active. */ int qemuMigrationSrcToFile(virQEMUDriver *driver, virDomainObj *vm, + const char *path, int *fd, virCommand *compressor, qemuMigrationParams *migParams, @@ -7204,7 +7224,7 @@ qemuMigrationSrcToFile(virQEMUDriver *driver, virDoma= inObj *vm, =20 if (migParams && qemuMigrationParamsCapEnabled(migParams, QEMU_MIGRATION_CAP_MAPPED= _RAM)) - rc =3D qemuMigrationSrcToSparseFile(driver, vm, fd, flags, asyncJo= b); + rc =3D qemuMigrationSrcToSparseFile(driver, vm, path, fd, flags, a= syncJob); else rc =3D qemuMigrationSrcToLegacyFile(driver, vm, *fd, compressor, a= syncJob); =20 diff --git a/src/qemu/qemu_migration.h b/src/qemu/qemu_migration.h index 71a9974753..beb888160a 100644 --- a/src/qemu/qemu_migration.h +++ b/src/qemu/qemu_migration.h @@ -238,6 +238,7 @@ qemuMigrationSrcIsAllowed(virDomainObj *vm, int qemuMigrationSrcToFile(virQEMUDriver *driver, virDomainObj *vm, + const char *path, int *fd, virCommand *compressor, qemuMigrationParams *migParams, diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index d48cdd5506..16e93f27d6 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -130,6 +130,7 @@ VIR_ENUM_IMPL(qemuMigrationParam, "multifd-zlib-level", "multifd-zstd-level", "avail-switchover-bandwidth", + "direct-io", ); =20 typedef struct _qemuMigrationParamsAlwaysOnItem qemuMigrationParamsAlwaysO= nItem; @@ -328,6 +329,9 @@ static const qemuMigrationParamInfoItem qemuMigrationPa= ramInfo[] =3D { [QEMU_MIGRATION_PARAM_AVAIL_SWITCHOVER_BANDWIDTH] =3D { .type =3D QEMU_MIGRATION_PARAM_TYPE_ULL, }, + [QEMU_MIGRATION_PARAM_DIRECT_IO] =3D { + .type =3D QEMU_MIGRATION_PARAM_TYPE_BOOL, + }, }; G_STATIC_ASSERT(G_N_ELEMENTS(qemuMigrationParamInfo) =3D=3D QEMU_MIGRATION= _PARAM_LAST); =20 @@ -793,7 +797,7 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr param= s, =20 =20 qemuMigrationParams * -qemuMigrationParamsForSave(bool sparse) +qemuMigrationParamsForSave(bool sparse, unsigned int flags) { g_autoptr(qemuMigrationParams) saveParams =3D NULL; =20 @@ -807,6 +811,11 @@ qemuMigrationParamsForSave(bool sparse) return NULL; saveParams->params[QEMU_MIGRATION_PARAM_MULTIFD_CHANNELS].value.i = =3D 1; saveParams->params[QEMU_MIGRATION_PARAM_MULTIFD_CHANNELS].set =3D = true; + + if (flags & VIR_DOMAIN_SAVE_BYPASS_CACHE) { + saveParams->params[QEMU_MIGRATION_PARAM_DIRECT_IO].value.b =3D= true; + saveParams->params[QEMU_MIGRATION_PARAM_DIRECT_IO].set =3D tru= e; + } } =20 return g_steal_pointer(&saveParams); diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index 88a1bc1a66..87822332d3 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -66,6 +66,7 @@ typedef enum { QEMU_MIGRATION_PARAM_MULTIFD_ZLIB_LEVEL, QEMU_MIGRATION_PARAM_MULTIFD_ZSTD_LEVEL, QEMU_MIGRATION_PARAM_AVAIL_SWITCHOVER_BANDWIDTH, + QEMU_MIGRATION_PARAM_DIRECT_IO, =20 QEMU_MIGRATION_PARAM_LAST } qemuMigrationParam; @@ -88,7 +89,7 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr params, qemuMigrationParty party); =20 qemuMigrationParams * -qemuMigrationParamsForSave(bool sparse); +qemuMigrationParamsForSave(bool sparse, unsigned int flags); =20 int qemuMigrationParamsDump(qemuMigrationParams *migParams, diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index e2043c0120..1e80af8a58 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -2235,7 +2235,8 @@ qemuMonitorMigrateToFd(qemuMonitor *mon, int qemuMonitorMigrateToFdSet(virDomainObj *vm, unsigned int flags, - int *fd) + int *fd, + int *directFd) { qemuDomainObjPrivate *priv =3D vm->privateData; qemuMonitor *mon =3D priv->mon; @@ -2244,7 +2245,7 @@ qemuMonitorMigrateToFdSet(virDomainObj *vm, g_autofree char *uri =3D NULL; int ret; =20 - VIR_DEBUG("fd=3D%d flags=3D0x%x", *fd, flags); + VIR_DEBUG("fd=3D%d directFd=3D%d flags=3D0x%x", *fd, *directFd, flags); =20 QEMU_CHECK_MONITOR(mon); =20 @@ -2256,6 +2257,8 @@ qemuMonitorMigrateToFdSet(virDomainObj *vm, =20 fdPassMigrate =3D qemuFDPassNew("libvirt-outgoing-migrate", priv); qemuFDPassAddFD(fdPassMigrate, fd, "-fd"); + if (*directFd !=3D -1) + qemuFDPassAddFD(fdPassMigrate, directFd, "-directio-fd"); qemuFDPassTransferMonitor(fdPassMigrate, mon); =20 uri =3D g_strdup_printf("file:%s,offset=3D%#lx", diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 6da380aa65..dfb0e8abb6 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -861,7 +861,8 @@ int qemuMonitorMigrateToFd(qemuMonitor *mon, =20 int qemuMonitorMigrateToFdSet(virDomainObj *vm, unsigned int flags, - int *fd); + int *fd, + int *directFd); =20 int qemuMonitorMigrateToHost(qemuMonitor *mon, unsigned int flags, diff --git a/src/qemu/qemu_saveimage.c b/src/qemu/qemu_saveimage.c index 3f20ffd58c..28d668231e 100644 --- a/src/qemu/qemu_saveimage.c +++ b/src/qemu/qemu_saveimage.c @@ -501,7 +501,7 @@ qemuSaveImageCreate(virQEMUDriver *driver, goto cleanup; =20 /* Perform the migration */ - if (qemuMigrationSrcToFile(driver, vm, &fd, compressor, saveParams, fl= ags, asyncJob) < 0) + if (qemuMigrationSrcToFile(driver, vm, path, &fd, compressor, savePara= ms, flags, asyncJob) < 0) goto cleanup; =20 /* Touch up file header to mark image complete. */ --=20 2.43.0 From nobody Fri Dec 19 18:47:07 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1738953924; cv=none; d=zohomail.com; s=zohoarc; b=C47qLCJ5qSe/Xc0sP/DyUZpbPdiYLjhDOMGhPtC09St8dc2QqrZzlZu0zoqw6WPsy28/uFDnoV6opaETdYbqUyxyRFWmQQPSpeY5mg3cxdFIBJTrAq5IaS1qPmCFzrjJhodCDyIaCcVj0onaZqA4T4SqjcJaeAs6R9OeQ8Tn96A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1738953924; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id; bh=YxFqOM2XG6rlAVmVf5p+QMuZHDLwSKthHRXCpjZu5vs=; b=D9hN57TOamL5Zic+lqlUwYRchMQde0BB7ez5rRetYMLrgroC2zNxiSmTJghffZTP5p8cyH7cDRJb88DELpHlKBrSs6TsZfY/71Nypky20swgClIbsedeeL1k3/zdDegsrpUOyNtY/MNwX6Yw5XRFSPB96wKAqHjEIWgDz+cQunU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1738953924008616.1738643067977; Fri, 7 Feb 2025 10:45:24 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 553C9A29; Fri, 7 Feb 2025 13:45:23 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 3008817AC; Fri, 7 Feb 2025 13:38:34 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 92CAC14D1; Fri, 7 Feb 2025 13:38:28 -0500 (EST) Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 5B3C314CE for ; Fri, 7 Feb 2025 13:38:07 -0500 (EST) Received: by mail-wr1-f51.google.com with SMTP id ffacd0b85a97d-38dcb97e8a3so730052f8f.3 for ; Fri, 07 Feb 2025 10:38:07 -0800 (PST) Received: from localhost (205-201-32-8.scinternet.net. [205.201.32.8]) by smtp.gmail.com with UTF8SMTPSA id d2e1a72fcca58-73048a9d7aesm3338939b3a.33.2025.02.07.10.38.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 10:38:05 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1738953486; x=1739558286; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=lPJckepq7iCnpN0ASP2V3KPuLEjA/I8S44N3hwzgjnY=; b=d3sV+LTJV5PsQP4x9BEU0QV/FAvFd2sNtNkR5BPuG1P6U5efJOF6qFRg4QVPuX6HtP NJJZ2UaUoksW5By9RkmGKdmwXczzRGrJ01ILwOCa49T3mJ1Tn/UAb245E0qtvJ7SO7Bx GBjDryY7PtAbu1rfSYYaB3vj9FwNCCB9fBeJVINWRNo2Zv8XC9/ylPB05Bty60X4fc1E phX+iYr3QScp9dH8lG0Bw2oMHCb0axPMGReOJm0wnKaWQ7A3xzW+QcZMIJsLmG7PyF2s xn2DqK/bI3dtUUN3snbOZ8YR+GyeaTPRs4uhYu39f5A9guYTJkUNhHt2mwzKSluFQ3+Y GYFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738953486; x=1739558286; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=lPJckepq7iCnpN0ASP2V3KPuLEjA/I8S44N3hwzgjnY=; b=fJs2pCcCDFYcN5FCRbGVJNIdhohBn7HgOyosH42MmcFo3G4b2kmq2pp6NjNV1ory1F 2YjsB0yqfX1VDz/lDXwvJ5XPSIBunJpCz505TTN/+8vrqA64Pl+G0X3hW6ysPbzNCJez BvfgGhOOZ4madeNke6vv3o9Bs+2N12ML1rdsujXCQo4BIVMlA5eewsk+ov14K2bDVoKw 5nPR9AIFUvWl0GNBsXz+PTtjb5m1zaHPk9WxTKC37K7A4qZ7TxY4st3EQjo8qRBb7vtA Topz4E7rPEvNq6fvS1AfV+ufTUnaKLokZ9qheoNUbAq5gEfIKEF3D68ZpNEGnm4jdmSL BF4g== X-Gm-Message-State: AOJu0YyjnM18pCY4nIS0jRQFHjHsAuOkOjEDS40ViJ+3uEyPDdpem0HL 8NowfzMs9A7P4pw/J0prvh0Epsz50Aw3VMxSBIA2J+RVAl4H/bbn1G9odph1+aeGD2MYoVKsrm+ R X-Gm-Gg: ASbGncuRntPctipYOaf/Nno9tf3JLMNfRESERirXB28rCYUIey9nk099TkpnA3fhXm9 tiu1YMdeRF0EILNEwkCxmtZnnbg3Js1CXLIEYo332CPv/Wmg/PEXw0VyGnC/xvfl/WH/7B3ZWS/ fsNIAk2ZMpHdaHLPlofvcoV8CXcRQukGMU0wRV+3ZDkPyensfujWkHpEkN7mikVYIuTOh8/Sw7S Je0WriWQDvWKFhOpP3LBlB9lEyU6XIbyQbq+Zh4215UI4zlVWWc9WQaX6ucZ3IK3pvmqv8zp50E d/q8FxFoXAOTCDqX1kzrOWYLqf2Orv6ylg== X-Google-Smtp-Source: AGHT+IEpdUUtIXRgGV6/DIRUFtayEzlZsVstC8fi0h6WSYit9TCRL3nM41+hOwDz9kUJ81yGgMiSBA== X-Received: by 2002:a05:6000:1ac6:b0:385:fae7:fe50 with SMTP id ffacd0b85a97d-38dc9346e4emr2811268f8f.42.1738953486211; Fri, 07 Feb 2025 10:38:06 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V3 15/19] qemu: Support O_DIRECT with mapped-ram on restore Date: Fri, 7 Feb 2025 11:27:26 -0700 Message-ID: <20250207183730.21686-16-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250207183730.21686-1-jfehlig@suse.com> References: <20250207183730.21686-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: VROJLHYFTUE4YAL6EWXAF4ZWDTVLP2OR X-Message-ID-Hash: VROJLHYFTUE4YAL6EWXAF4ZWDTVLP2OR X-MailFrom: jfehlig@suse.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: farosas@suse.de X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Jim Fehlig via Devel Reply-To: Jim Fehlig X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1738953925179019000 Content-Type: text/plain; charset="utf-8" When using the mapped-ram migration capability, direct IO is enabled by setting the "direct-io" migration parameter to "true" and passing QEMU an additional fd with O_DIRECT set. Signed-off-by: Jim Fehlig --- src/qemu/qemu_migration.c | 11 ++++++----- src/qemu/qemu_process.c | 27 +++++++++++++++++++++++---- src/qemu/qemu_process.h | 6 ++++-- 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index a5a80230b2..d0cbcce044 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -3063,7 +3063,8 @@ qemuMigrationDstPrepareCleanup(virQEMUDriver *driver, } =20 static qemuProcessIncomingDef * -qemuMigrationDstPrepare(virDomainObj *vm, +qemuMigrationDstPrepare(virQEMUDriver *driver, + virDomainObj *vm, bool tunnel, const char *protocol, const char *listenAddress, @@ -3123,9 +3124,9 @@ qemuMigrationDstPrepare(virDomainObj *vm, migrateFrom =3D g_strdup_printf(incFormat, protocol, listenAddress= , port); } =20 - return qemuProcessIncomingDefNew(vm, listenAddress, + return qemuProcessIncomingDefNew(driver, vm, listenAddress, migrateFrom, fd, - NULL, NULL); + NULL, NULL, NULL); } =20 =20 @@ -3265,7 +3266,7 @@ qemuMigrationDstPrepareActive(virQEMUDriver *driver, goto error; stopProcess =3D true; =20 - if (!(incoming =3D qemuMigrationDstPrepare(vm, tunnel, protocol, + if (!(incoming =3D qemuMigrationDstPrepare(driver, vm, tunnel, protoco= l, listenAddress, port, &dataFD[0]))) goto error; @@ -3637,7 +3638,7 @@ qemuMigrationDstPrepareResume(virQEMUDriver *driver, =20 priv->origname =3D g_strdup(origname); =20 - if (!(incoming =3D qemuMigrationDstPrepare(vm, false, protocol, + if (!(incoming =3D qemuMigrationDstPrepare(driver, vm, false, protocol, listenAddress, port, NULL))) goto cleanup; =20 diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 94e7e90d28..f51378aeba 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4837,13 +4837,16 @@ qemuProcessIncomingDefFree(qemuProcessIncomingDef *= inc) * qemuProcessIncomingDefFree will NOT close it. */ qemuProcessIncomingDef * -qemuProcessIncomingDefNew(virDomainObj *vm, +qemuProcessIncomingDefNew(virQEMUDriver *driver, + virDomainObj *vm, const char *listenAddress, const char *migrateFrom, int *fd, const char *path, - virQEMUSaveData *data) + virQEMUSaveData *data, + qemuMigrationParams *migParams) { + g_autoptr(virQEMUDriverConfig) cfg =3D virQEMUDriverGetConfig(driver); qemuDomainObjPrivate *priv =3D vm->privateData; qemuProcessIncomingDef *inc =3D NULL; =20 @@ -4856,9 +4859,25 @@ qemuProcessIncomingDefNew(virDomainObj *vm, =20 if (data && data->header.format =3D=3D QEMU_SAVE_FORMAT_SPARSE) { size_t offset =3D sizeof(virQEMUSaveHeader) + data->header.data_le= n; + bool directio =3D false; =20 inc->fdPassMigrate =3D qemuFDPassNew("libvirt-incoming-migrate", p= riv); - qemuFDPassAddFD(inc->fdPassMigrate, fd, "-fd"); + /* When using directio with mapped-ram, qemu needs an fd without + * O_DIRECT set for reading small bits of unaligned state. */ + if (qemuMigrationParamsGetBool(migParams, QEMU_MIGRATION_PARAM_DIR= ECT_IO, &directio) < 0) + goto error; + + if (directio) { + VIR_AUTOCLOSE bufferedFd =3D -1; + + if ((bufferedFd =3D qemuDomainOpenFile(cfg, NULL, path, O_RDON= LY, NULL)) < 0) + goto error; + + qemuFDPassAddFD(inc->fdPassMigrate, &bufferedFd, "-buffered-fd= "); + qemuFDPassAddFD(inc->fdPassMigrate, fd, "direct-io-fd"); + } else { + qemuFDPassAddFD(inc->fdPassMigrate, fd, "-buffered-fd"); + } inc->uri =3D g_strdup_printf("file:%s,offset=3D%#lx", qemuFDPassGetPath(inc->fdPassMigrate), = offset); } else { @@ -8499,7 +8518,7 @@ qemuProcessStartWithMemoryState(virConnectPtr conn, /* The fd passed to qemuProcessIncomingDefNew is used to create the mi= gration * URI, so it must be called after starting the decompression program. */ - incoming =3D qemuProcessIncomingDefNew(vm, NULL, "stdio", fd, path, da= ta); + incoming =3D qemuProcessIncomingDefNew(driver, vm, NULL, "stdio", fd, = path, data, migParams); if (!incoming) return -1; =20 diff --git a/src/qemu/qemu_process.h b/src/qemu/qemu_process.h index c51335ad7a..8f7b3f24c4 100644 --- a/src/qemu/qemu_process.h +++ b/src/qemu/qemu_process.h @@ -57,12 +57,14 @@ struct _qemuProcessIncomingDef { const char *path; /* path associated with fd */ }; =20 -qemuProcessIncomingDef *qemuProcessIncomingDefNew(virDomainObj *vm, +qemuProcessIncomingDef *qemuProcessIncomingDefNew(virQEMUDriver *driver, + virDomainObj *vm, const char *listenAddres= s, const char *migrateFrom, int *fd, const char *path, - virQEMUSaveData *data); + virQEMUSaveData *data, + qemuMigrationParams *mig= Params); =20 void qemuProcessIncomingDefFree(qemuProcessIncomingDef *inc); =20 --=20 2.43.0 From nobody Fri Dec 19 18:47:07 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1738953943; cv=none; d=zohomail.com; s=zohoarc; b=mA7PYMoSUnx/E4pEL3d7uOxwrEtnCAMbjZFykLn43bZmES1GRhKZEGz1NWMYvExw3kSmncyx4o3/gSxRm5qpJDuR0dhjPLikQ9qhyj4IEVzgaI3gutjtuShiLSQGO+lUOt49URIscbvT4MwH6oeMm4pqHrNT4EVlW404eRGnjqk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1738953943; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id; bh=rlCXWQUMOmmIyTbsg6hrMuGl99adTT2SvSJRvtfyulY=; b=aULKtLq4vN6KnHKDCaRA16M2+d8yeVmgez6jgrFBYBRImZ2r/bKPnXpD7bat0fpcEkOONmTKdVRL5UbYXsNzmqZag1u0ieRU5jTmoTChHe+g0RAqqvweHILOeW7BWXNdo3cIasH2HmwH/E6HOYF1prHMhk3zUYh1rfI3/gihVow= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1738953943596742.4825806421662; Fri, 7 Feb 2025 10:45:43 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id AA0E218A4; Fri, 7 Feb 2025 13:45:42 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id F23BF1706; Fri, 7 Feb 2025 13:38:36 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 29A511888; Fri, 7 Feb 2025 13:38:32 -0500 (EST) Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 8555D15F7 for ; Fri, 7 Feb 2025 13:38:09 -0500 (EST) Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-4361f65ca01so23679325e9.1 for ; Fri, 07 Feb 2025 10:38:09 -0800 (PST) Received: from localhost (205-201-32-8.scinternet.net. [205.201.32.8]) by smtp.gmail.com with UTF8SMTPSA id d2e1a72fcca58-73048bf1a0csm3314469b3a.115.2025.02.07.10.38.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 10:38:07 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1738953488; x=1739558288; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=nWafGfVd0X20FZcSBt79NzW4bCVsGIeGkDs4uIU6lRk=; b=bB95mp8FLDMR9rZcan4X9e4OXD5CMskhIAJShOLJMOIacbSRi7/sKzTIeFdVMFvZnn JVdmBYt7pB4yiWk9LuRs3X2Zqzxnf7pc64YaKUtC3amTbEAqULpjllHTBSqutFVklSx6 o196l8ZNVISXHjCVwBYpdwlxcEuG2G/9bAZKpjJ7iZxGcV2hysKskx1emp9aKND3Aivj narDSGiI/3P+upTAaJevxaSl6KvZE6CviHl3+Ictd0kf6/5avIxneiFPO6dexx2fzwBU I9UxdTuk46w2h4NaB/tWQ0jr5d4B17mvRkM6sLgqsD5nPjX+tT3AI8AEXX4xYCs7AhAw uezw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738953488; x=1739558288; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=nWafGfVd0X20FZcSBt79NzW4bCVsGIeGkDs4uIU6lRk=; b=nMPd35SRd0tY2fvFTIxjMlqKhVSHAF43Wa/RmQgdkE0k8dujc9kR92Mb+8a0RJWlHJ aT7KKyjfU6VhBjpGEGZSPuy2yQcvePuIFtz3DDoT7z4otPeW3QXc4IB0Z1fxpiJUEaVf U7VpU5CU2w0hXPsaGcyzmH/nQmZnXvtk/T+1CYMS7xxIxh9WrQL9vMzAJ5YdMrK9pnE1 Xz+CAw4btPVVJsb8AVVuVufXnaqdCROjpuVTGKjypxkaTTG5MyniYVgZxvqTfBZwAE7s OCNDich3PqgfIdfPMjLUSrTzgl7Yq3rIiqhZOyOUhsFsjKWHq0DVjvhDMbBLeo9/OWgN Eitg== X-Gm-Message-State: AOJu0Yzfthz0YDpxgdgNXCUqrwGiV1QmEE27BFra3EVwWlUAVEb4OZO0 /RXvh9qu1N/PXqwVLIOeE9CJXMmh82hr82is46/e4/LmXZQkX4KH5ZVDBP/0yhp7zmVP+ATqoJK g X-Gm-Gg: ASbGncv+Ak8UfvU1DVGDcT3BAKpjsoPof88MTc747/rFCCUx3hh1dxYdKU6MsCGUPA1 po3F/j+1PG0clDvfBR7WInUXtz5ZPRCBv79tOG+JW351K+UR3ClMyrFXbpOndJ7A1meX8B/tge8 z9BGK/yf3wvMJiGADwxvyAryTm5QICjjKDYhZbJ4DQ0Pt4OhDt0SwYavS9FOOoHvNLxisVygfCz 2wx+KXVfhYzsMWn+wXqQCiwTTHz877R9myVGQ6qKVua0i8kK/kG3Yslld9ye9EKcVOF9bb6tLzr ri54vzWZkSOddxq3ltVwCQufIEwmbVX8Zw== X-Google-Smtp-Source: AGHT+IEJ3ex2Ponf+t6AsBw1aVBywxAKITP5C3/VJzalI/MMsr1ZAqOB8SUs1nXDG/TfI27Icd2rgA== X-Received: by 2002:a05:6000:1acb:b0:38a:4b8b:295a with SMTP id ffacd0b85a97d-38dc9101923mr3494510f8f.31.1738953488427; Fri, 07 Feb 2025 10:38:08 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V3 16/19] include: Define constants for parallel save/restore Date: Fri, 7 Feb 2025 11:27:27 -0700 Message-ID: <20250207183730.21686-17-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250207183730.21686-1-jfehlig@suse.com> References: <20250207183730.21686-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: FDM7NXYYQF7OKG4NHBVBVWPGUKCKFA4F X-Message-ID-Hash: FDM7NXYYQF7OKG4NHBVBVWPGUKCKFA4F X-MailFrom: jfehlig@suse.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: farosas@suse.de, Claudio Fontana X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Jim Fehlig via Devel Reply-To: Jim Fehlig X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1738953945970019100 Content-Type: text/plain; charset="utf-8" From: Claudio Fontana Add a new VIR_DOMAIN_SAVE_PARALLEL flag to the save and restore APIs, which can be used to specify the use of multiple, parallel channels for saving and restoring a domain. The number of parallel channels can be set using the VIR_DOMAIN_SAVE_PARAM_PARALLEL_CHANNELS typed parameter. Signed-off-by: Claudio Fontana Signed-off-by: Jim Fehlig --- include/libvirt/libvirt-domain.h | 11 +++++++++++ src/libvirt-domain.c | 6 ++++++ 2 files changed, 17 insertions(+) diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-dom= ain.h index f5420bca6e..0e94a4bd09 100644 --- a/include/libvirt/libvirt-domain.h +++ b/include/libvirt/libvirt-domain.h @@ -1655,6 +1655,7 @@ typedef enum { VIR_DOMAIN_SAVE_RUNNING =3D 1 << 1, /* Favor running over paused = (Since: 0.9.5) */ VIR_DOMAIN_SAVE_PAUSED =3D 1 << 2, /* Favor paused over running = (Since: 0.9.5) */ VIR_DOMAIN_SAVE_RESET_NVRAM =3D 1 << 3, /* Re-initialize NVRAM from t= emplate (Since: 8.1.0) */ + VIR_DOMAIN_SAVE_PARALLEL =3D 1 << 4, /* Save and restore using par= allel channels (Since: 10.6.0) */ } virDomainSaveRestoreFlags; =20 int virDomainSave (virDomainPtr domain, @@ -1700,6 +1701,16 @@ int virDomainRestoreParams (vir= ConnectPtr conn, */ # define VIR_DOMAIN_SAVE_PARAM_DXML "dxml" =20 +/** + * VIR_DOMAIN_SAVE_PARAM_PARALLEL_CHANNELS: + * + * an optional parameter used to specify the number of IO channels to use + * during parallel save. As VIR_TYPED_PARAM_INT. + * + * Since: 11.1.0 + */ +# define VIR_DOMAIN_SAVE_PARAM_PARALLEL_CHANNELS "parallel.channels" + /* See below for virDomainSaveImageXMLFlags */ char * virDomainSaveImageGetXMLDesc (virConnectPtr conn, const char *file, diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c index cf68b0520b..d75ee25580 100644 --- a/src/libvirt-domain.c +++ b/src/libvirt-domain.c @@ -1010,6 +1010,9 @@ virDomainSaveFlags(virDomainPtr domain, const char *t= o, * If VIR_DOMAIN_SAVE_PARAM_FILE is not provided then a managed save is * performed (see virDomainManagedSave). * + * See VIR_DOMAIN_SAVE_PARAM_* for detailed description of accepted save + * parameters. + * * Returns 0 in case of success and -1 in case of failure. * * Since: 8.4.0 @@ -1222,6 +1225,9 @@ virDomainRestoreFlags(virConnectPtr conn, const char = *from, const char *dxml, * now, VIR_DOMAIN_SAVE_PARAM_FILE is required but this requirement may * be lifted in the future. * + * See VIR_DOMAIN_SAVE_PARAM_* for detailed description of accepted + * restore parameters. + * * Returns 0 in case of success and -1 in case of failure. * * Since: 8.4.0 --=20 2.43.0 From nobody Fri Dec 19 18:47:07 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1738953979; cv=none; d=zohomail.com; s=zohoarc; b=DUihjYykL9HK4jO8RK8A1TcOoXgAWZlKAtp/OnzCQl9ba9HtcFe8wRYr6LBSy4CY8ywV9r5uOBlvrwnWLQ+S0W9dPnXIh2/M8KoWk3jRVv+j8W2HqJYDiXXY+popOIBUtMW63Pbw7MyYdQf2j92suGPlSx/gQM715NgJdEgkASM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1738953979; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id; bh=r8z8EpK6ze30mREUFHQoaRWCmaAuHP0SOxLmzCfW/AE=; b=mPuLNrihF+wKvpsJ2iWllawNUbblvSDeygDeQlW+FKbqvUve4+DydMVVcdWOqoDYsJmD+epVmor3KNZm8GcS2yHPSGtq2AZ8vW/4yUO3nMv0OiGYCE5s8xJAuxiKS/9AJtqUvyKkXysXN5AADTHLgObM4UdFNG5cyUHOmZJGv8Y= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1738953979136865.0599815633632; Fri, 7 Feb 2025 10:46:19 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 8E5821A2C; Fri, 7 Feb 2025 13:46:18 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 3A39B1913; Fri, 7 Feb 2025 13:38:41 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 8CC1318E7; Fri, 7 Feb 2025 13:38:36 -0500 (EST) Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id D7B8715D3 for ; Fri, 7 Feb 2025 13:38:11 -0500 (EST) Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-436202dd7f6so26325005e9.0 for ; Fri, 07 Feb 2025 10:38:11 -0800 (PST) Received: from localhost (205-201-32-8.scinternet.net. [205.201.32.8]) by smtp.gmail.com with UTF8SMTPSA id 41be03b00d2f7-ad51aee5bbcsm2915143a12.39.2025.02.07.10.38.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 10:38:10 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1738953491; x=1739558291; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=E23OodNAyTRC3+yRkbKmsqao5TInqYeFJICxusrRtsI=; b=dFCCKfeRBZobm3OHl3PJAohqWWeTE1XOp/Hz235kJJfoD31Jrq/QFE//2IRAtVXt0B t+Q5d/d3TtXYEtnMICMKoeCt7Q3Lr9PydcXkAxBKL7So53Vtv4OeLXvdAd8gsmoYICxM pm0VoTVrHzeEovzj7LDrRbuVRZZHJAlG8bluXuofHyuCRl6s3HHp6A5r9jo3AQ0m5GYw UKXKAJbKM10C8Vh0LYr8lnwkYFCOaw5OOR4/zpNnk6KXkLY0kkLrrkSrY3VUyQD9HAdh Kq2q3becgl22HG7R90DCiUCWGnDatWBTYW09Vy0LsWOxYbXaOCfv95zUxwGW5MNN8wl2 pY+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738953491; x=1739558291; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=E23OodNAyTRC3+yRkbKmsqao5TInqYeFJICxusrRtsI=; b=J8zNS2fsT7AtPz3l+6BUs9vJiqcC10jweXHQLdf5SBB9mCABOlIH9DJGXflkspabXW yx1IX/qABHm2gCH5k2ZxRER6Xyx7DyK5izzeZ1HVMc+zsaSNkVejFXcHA3EjjdLeO1Hv sawtAZEP4uANkfzv5kzMeFZzabTmIkmnopPGULe6bycyphFgK2D99CtY/cLdfeRN4I56 xOwipzKKFRqocBxxF5fXz+A23l26L9HZMmA7NsDJhABFPzWVSHh/XkmnkYbEdIAxaiLB PAh++GRrwaCUURtg72ELusMAv/7rNgJyeOUx8kfsqpHPq/aNgkb4z3dZhpx7xTFG9gec FPIw== X-Gm-Message-State: AOJu0YwLaROwhwr+KM1oMugJ8rzSJHCqWxuXNoF98dRodDBF7F7LlRt1 m1UWh5hdRiEeil+2WRQN0EBssoPQNgi2U+pkt3ySzRHdVeSXHDEM/1a/SUufDktWj6ZenBCOoZ/ W X-Gm-Gg: ASbGncs5i8URID6DNXMvXUvgzGiirWHRgywUzj4wrqy5f1nrwOeXN7c4Xttf8Vld5fa wAgC1OQm55ht60O646vjVCTWhw+YeuvImPLwud6Z5sLgpEfl/uv1YCexJWT0S8i6oWb7sYbV4s7 BQwqZ11fc4L6hwZ9B1sJMXs/bn1AKNj6iR1sKhYAkr0vgIRAFk+0iko29DRk61YJ7zePv8YxHmF K1VwKe/P2TI8jIs2nNm/toeIEbeY9GVON05vgL1hqS5moZn+rg70QsFVAPMPApKl9pJH+3HmN8M MjRCYyESgQfH7u0it+JcwdKxrKRkShmwOw== X-Google-Smtp-Source: AGHT+IEUKxtxIe1scDcdzb99ali0V2nWje7hqfPjEMFjDVmLnk3Wj5+ruvQ6qDquIRElYP7EMxYXdQ== X-Received: by 2002:a5d:6d85:0:b0:38d:a713:8e4e with SMTP id ffacd0b85a97d-38dc933e2b2mr2939954f8f.47.1738953490615; Fri, 07 Feb 2025 10:38:10 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V3 17/19] qemu: Add support for parallel save and restore Date: Fri, 7 Feb 2025 11:27:28 -0700 Message-ID: <20250207183730.21686-18-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250207183730.21686-1-jfehlig@suse.com> References: <20250207183730.21686-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 6VWIZAK6KFFESRV2AVHLCBXNQQYO3VSO X-Message-ID-Hash: 6VWIZAK6KFFESRV2AVHLCBXNQQYO3VSO X-MailFrom: jfehlig@suse.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: farosas@suse.de X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Jim Fehlig via Devel Reply-To: Jim Fehlig X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1738953979533019000 Content-Type: text/plain; charset="utf-8" Add support for parallel save and restore by mapping libvirt's "parallel-channels" parameter to QEMU's "multifd-channels" migration parameter. Signed-off-by: Jim Fehlig --- src/qemu/qemu_driver.c | 32 +++++++++++++++++++++----------- src/qemu/qemu_migration_params.c | 31 +++++++++++++++++++++++++++++-- src/qemu/qemu_migration_params.h | 5 ++++- 3 files changed, 54 insertions(+), 14 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index ad15689eb8..b842acf249 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -2611,6 +2611,8 @@ qemuDomainSaveInternal(virQEMUDriver *driver, int format, virCommand *compressor, const char *xmlin, + virTypedParameterPtr params, + int nparams, unsigned int flags) { g_autofree char *xml =3D NULL; @@ -2700,7 +2702,8 @@ qemuDomainSaveInternal(virQEMUDriver *driver, goto endjob; xml =3D NULL; =20 - if (!(saveParams =3D qemuMigrationParamsForSave(format =3D=3D QEMU_SAV= E_FORMAT_SPARSE, + if (!(saveParams =3D qemuMigrationParamsForSave(params, nparams, + format =3D=3D QEMU_SAVE_= FORMAT_SPARSE, flags))) goto endjob; =20 @@ -2787,7 +2790,7 @@ qemuDomainManagedSaveHelper(virQEMUDriver *driver, VIR_INFO("Saving state of domain '%s' to '%s'", vm->def->name, path); =20 if (qemuDomainSaveInternal(driver, vm, path, format, - compressor, dxml, flags) < 0) + compressor, dxml, NULL, 0, flags) < 0) return -1; =20 vm->hasManagedSave =3D true; @@ -2826,7 +2829,7 @@ qemuDomainSaveFlags(virDomainPtr dom, const char *pat= h, const char *dxml, goto cleanup; =20 ret =3D qemuDomainSaveInternal(driver, vm, path, format, - compressor, dxml, flags); + compressor, dxml, NULL, 0, flags); =20 cleanup: virDomainObjEndAPI(&vm); @@ -2856,13 +2859,16 @@ qemuDomainSaveParams(virDomainPtr dom, =20 virCheckFlags(VIR_DOMAIN_SAVE_BYPASS_CACHE | VIR_DOMAIN_SAVE_RUNNING | - VIR_DOMAIN_SAVE_PAUSED, -1); + VIR_DOMAIN_SAVE_PAUSED | + VIR_DOMAIN_SAVE_PARALLEL, -1); =20 if (virTypedParamsValidate(params, nparams, VIR_DOMAIN_SAVE_PARAM_FILE, VIR_TYPED_PARAM_STRING, VIR_DOMAIN_SAVE_PARAM_DXML, VIR_TYPED_PARAM_STRING, + VIR_DOMAIN_SAVE_PARAM_PARALLEL_CHANNELS, + VIR_TYPED_PARAM_INT, NULL) < 0) return -1; =20 @@ -2894,7 +2900,7 @@ qemuDomainSaveParams(virDomainPtr dom, goto cleanup; =20 ret =3D qemuDomainSaveInternal(driver, vm, to, format, - compressor, dxml, flags); + compressor, dxml, params, nparams, flags); =20 cleanup: virDomainObjEndAPI(&vm); @@ -5769,6 +5775,8 @@ static int qemuDomainRestoreInternal(virConnectPtr conn, const char *path, const char *dxml, + virTypedParameterPtr params, + int nparams, unsigned int flags, int (*ensureACL)(virConnectPtr, virDomainDef *)) { @@ -5790,7 +5798,8 @@ qemuDomainRestoreInternal(virConnectPtr conn, virCheckFlags(VIR_DOMAIN_SAVE_BYPASS_CACHE | VIR_DOMAIN_SAVE_RUNNING | VIR_DOMAIN_SAVE_PAUSED | - VIR_DOMAIN_SAVE_RESET_NVRAM, -1); + VIR_DOMAIN_SAVE_RESET_NVRAM | + VIR_DOMAIN_SAVE_PARALLEL, -1); =20 if (flags & VIR_DOMAIN_SAVE_RESET_NVRAM) reset_nvram =3D true; @@ -5799,7 +5808,7 @@ qemuDomainRestoreInternal(virConnectPtr conn, goto cleanup; =20 sparse =3D data->header.format =3D=3D QEMU_SAVE_FORMAT_SPARSE; - if (!(restoreParams =3D qemuMigrationParamsForSave(sparse, flags))) + if (!(restoreParams =3D qemuMigrationParamsForSave(params, nparams, sp= arse, flags))) goto cleanup; =20 fd =3D qemuSaveImageOpen(driver, path, @@ -5881,7 +5890,7 @@ qemuDomainRestoreFlags(virConnectPtr conn, const char *dxml, unsigned int flags) { - return qemuDomainRestoreInternal(conn, path, dxml, flags, + return qemuDomainRestoreInternal(conn, path, dxml, NULL, 0, flags, virDomainRestoreFlagsEnsureACL); } =20 @@ -5889,7 +5898,7 @@ static int qemuDomainRestore(virConnectPtr conn, const char *path) { - return qemuDomainRestoreInternal(conn, path, NULL, 0, + return qemuDomainRestoreInternal(conn, path, NULL, NULL, 0, 0, virDomainRestoreEnsureACL); } =20 @@ -5905,6 +5914,7 @@ qemuDomainRestoreParams(virConnectPtr conn, if (virTypedParamsValidate(params, nparams, VIR_DOMAIN_SAVE_PARAM_FILE, VIR_TYPED_PARAM= _STRING, VIR_DOMAIN_SAVE_PARAM_DXML, VIR_TYPED_PARAM= _STRING, + VIR_DOMAIN_SAVE_PARAM_PARALLEL_CHANNELS, VI= R_TYPED_PARAM_INT, NULL) < 0) return -1; =20 @@ -5921,7 +5931,7 @@ qemuDomainRestoreParams(virConnectPtr conn, return -1; } =20 - ret =3D qemuDomainRestoreInternal(conn, path, dxml, flags, + ret =3D qemuDomainRestoreInternal(conn, path, dxml, params, nparams, f= lags, virDomainRestoreParamsEnsureACL); return ret; } @@ -6133,7 +6143,7 @@ qemuDomainObjRestore(virConnectPtr conn, } =20 sparse =3D data->header.format =3D=3D QEMU_SAVE_FORMAT_SPARSE; - if (!(restoreParams =3D qemuMigrationParamsForSave(sparse, + if (!(restoreParams =3D qemuMigrationParamsForSave(NULL, 0, sparse, bypass_cache ? VIR_DO= MAIN_SAVE_BYPASS_CACHE : 0))) return -1; =20 diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 16e93f27d6..b696b0d13e 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -797,10 +797,19 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr par= ams, =20 =20 qemuMigrationParams * -qemuMigrationParamsForSave(bool sparse, unsigned int flags) +qemuMigrationParamsForSave(virTypedParameterPtr params, + int nparams, + bool sparse, + unsigned int flags) { g_autoptr(qemuMigrationParams) saveParams =3D NULL; =20 + if (flags & VIR_DOMAIN_SAVE_PARALLEL && !sparse) { + virReportError(VIR_ERR_INVALID_ARG, "%s", + _("Parallel save is only supported with the 'sparse= ' save image format")); + return NULL; + } + if (!(saveParams =3D qemuMigrationParamsNew())) return NULL; =20 @@ -809,7 +818,25 @@ qemuMigrationParamsForSave(bool sparse, unsigned int f= lags) return NULL; if (virBitmapSetBit(saveParams->caps, QEMU_MIGRATION_CAP_MULTIFD) = < 0) return NULL; - saveParams->params[QEMU_MIGRATION_PARAM_MULTIFD_CHANNELS].value.i = =3D 1; + + if (flags & VIR_DOMAIN_SAVE_PARALLEL) { + int nchannels; + + if (params && virTypedParamsGetInt(params, nparams, + VIR_DOMAIN_SAVE_PARAM_PARAL= LEL_CHANNELS, + &nchannels) < 0) + return NULL; + + if (nchannels < 1) { + virReportError(VIR_ERR_INVALID_ARG, "%s", + _("number of parallel save channels cannot = be less than 1")); + return NULL; + } + + saveParams->params[QEMU_MIGRATION_PARAM_MULTIFD_CHANNELS].valu= e.i =3D nchannels; + } else { + saveParams->params[QEMU_MIGRATION_PARAM_MULTIFD_CHANNELS].valu= e.i =3D 1; + } saveParams->params[QEMU_MIGRATION_PARAM_MULTIFD_CHANNELS].set =3D = true; =20 if (flags & VIR_DOMAIN_SAVE_BYPASS_CACHE) { diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index 87822332d3..9d771d519d 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -89,7 +89,10 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr params, qemuMigrationParty party); =20 qemuMigrationParams * -qemuMigrationParamsForSave(bool sparse, unsigned int flags); +qemuMigrationParamsForSave(virTypedParameterPtr params, + int nparams, + bool sparse, + unsigned int flags); =20 int qemuMigrationParamsDump(qemuMigrationParams *migParams, --=20 2.43.0 From nobody Fri Dec 19 18:47:07 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1738954005; cv=none; d=zohomail.com; s=zohoarc; b=HB/a4pFAGztThhPhb2B9CLFjWkuT4N4KssRKxNmEUXvY+HEBmIi8GWPn/ZntXlCG87eRreud4oy/P6nci/ym/yxvJivrdBMUm1Eo9EfFn1SkoXlraHiBvnJ5+9pWF8mGBSz7kRVw6MdgH/b0lubWco85KR+D98ufX44VTqpA7IE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1738954005; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id; bh=NhpoeFVWiBqdBIU7ShXizpmc8Yjw9AYxL5k+fNs3XXk=; b=Iaef5gh/uCkXG5feAVzkl4E17/Vw9YDUAJbxAX4UTCc7pVbo5lN7AOn7E5DmkjUUPpaGJR+nvHlIN6aJL15k/1M2obxHLdiN8FxTSWIy4ZQs9wwKQSlZJkqKMKLXlIZN2dmcQ0loutbnouqcOMXE+FZSFDSvvKLBOWas4yTMLgc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1738954005410300.6617815690894; Fri, 7 Feb 2025 10:46:45 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 5A5811646; Fri, 7 Feb 2025 13:46:44 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 0C4141888; Fri, 7 Feb 2025 13:38:43 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 579201596; Fri, 7 Feb 2025 13:38:38 -0500 (EST) Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 1F9F21612 for ; Fri, 7 Feb 2025 13:38:14 -0500 (EST) Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-436345cc17bso17342835e9.0 for ; Fri, 07 Feb 2025 10:38:14 -0800 (PST) Received: from localhost (205-201-32-8.scinternet.net. [205.201.32.8]) by smtp.gmail.com with UTF8SMTPSA id 98e67ed59e1d1-2f9bf6f116fsm6014560a91.0.2025.02.07.10.38.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 10:38:12 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1738953493; x=1739558293; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=lFEfnHKLxyaCwAh/Cc8PhcGMjmxdr0RtUeku/Xo+0RA=; b=SJ0gr1makc7FGS/e9Z4MH/NKgX5gDg2OfyeNkWwM1Hq44RGVO+tnnxx7ywrf0oZO60 96GBVlN/Ga1LMpgUQilPV4/SksadFpr+QprLYe1tsrseL9xKigIaOltZ4NsFGywpEhvc xY2mWL/aa+r7f87RlWH1lDE2NV/87YRgo1pisWafMuEmYO2nr6D93DwS0qDSWLzyiNIf VxJoRgDvz/Y0dkpRyfkQGhLzI5IjoluVI18GWQwPPlPV94ZXrBUYDO6BIC2y0U3QyPYW yjNEbFbR8s/IiqTtibJRo+CgFFC+4gEEykTvLMuRK/H5O7Mt5mxbKwsilH9dDLVAFIBm lWHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738953493; x=1739558293; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=lFEfnHKLxyaCwAh/Cc8PhcGMjmxdr0RtUeku/Xo+0RA=; b=Gbs7+WUSeRUer1HudTro7oGeWDM8zTurumDXG2E0I4b1eTyqckdJYHT7Hyv+/xXh76 TXwyBOHD3DWgoW9TL0iE69Y0BpN/0J1QqBOkENy9fhm9LCh1f6b4yzTBuALEnsjDYBGH br8JdiXFviA+zKEqHlQQc977RCjO/3hAu7vvEAmgoHUmcjRFpn+Cd0zJZRK/ub7xdlqI dQj/KGQ5mZtc1o8MkoYth2dNyOBjeM7jwVbOxet1Aac4XODt3gyu2MhDU3C4aUEJ4JhZ 6zZeqsvaaCw6G3V50aWdwpr30TEfvxo60h8OvbjzdX1jq8WSBeots+5PtSLQuKLl5gmm HAMg== X-Gm-Message-State: AOJu0YwzowJLpjFak0/vTNWWDK1nbeKJgLmvtbHmgduXS7hKmUXCY2Ce KSAC1cv1DmE2aU2uowu5z7QGSyQw5Ig8+BuUlwqQ2+c8S01mFU/9a67StuMBo227Y/c5Kd4y305 9 X-Gm-Gg: ASbGncuCkJg2N3N/lhvYY2gYq12KOsgv/ZsMwGkiVkrMx5u+OlD/eazpCX9yiUuZInU Tu7UTurGN0HHhmTq/bwoi2nz0h0oJVwqa/lcrdb2epkTzO22mI80WWCD/6JA0iUeBp/FgQ3okIV zzJajNCizB3XwVYo2DzEroTHMLZv3ztwwi2Z3l753F6KpTGjbXviDUqeFtTfpXcQDEx+YmbL/4C vAe2XrfKeHzPocMZFDScd++7MuNrICH2dSLEm08shKQR/MtibYetLqT9afFJkC2FOFSTDmGOLfQ D+oRsDyJDhQVyictGH4sHnW5k0atlGwwRQ== X-Google-Smtp-Source: AGHT+IHQ3/lShGsOKjGUNnYCMzGacy5F0YY90hj+qjA1bI04Tpjlt4AL0J01jjGJ/Rnw7nhViB515Q== X-Received: by 2002:a05:6000:1f82:b0:386:459e:655d with SMTP id ffacd0b85a97d-38dc9137df4mr2585541f8f.20.1738953492920; Fri, 07 Feb 2025 10:38:12 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V3 18/19] tools: add parallel parameter to virsh save command Date: Fri, 7 Feb 2025 11:27:29 -0700 Message-ID: <20250207183730.21686-19-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250207183730.21686-1-jfehlig@suse.com> References: <20250207183730.21686-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: JBDVVC5LE6XIEPBRR3M46MFOPQVSLOBG X-Message-ID-Hash: JBDVVC5LE6XIEPBRR3M46MFOPQVSLOBG X-MailFrom: jfehlig@suse.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: farosas@suse.de, Claudio Fontana X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Jim Fehlig via Devel Reply-To: Jim Fehlig X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1738954006178019100 Content-Type: text/plain; charset="utf-8" From: Claudio Fontana Signed-off-by: Claudio Fontana Signed-off-by: Jim Fehlig --- docs/manpages/virsh.rst | 12 +++++++++++- tools/virsh-domain.c | 42 +++++++++++++++++++++++++++++++++++++---- 2 files changed, 49 insertions(+), 5 deletions(-) diff --git a/docs/manpages/virsh.rst b/docs/manpages/virsh.rst index 0eb1d6ea93..959393be13 100644 --- a/docs/manpages/virsh.rst +++ b/docs/manpages/virsh.rst @@ -3997,6 +3997,7 @@ save :: =20 save domain state-file [--bypass-cache] [--xml file] + [--parallel] [--parallel-channels channels] [{--running | --paused}] [--verbose] =20 Saves a running domain (RAM, but not disk state) to a state file so that @@ -4004,8 +4005,11 @@ it can be restored later. Once saved, the domain will no longer be running on the system, thus the memory allocated for the domain will be free for other domains to use. ``virsh restore`` restores from this state file. + If *--bypass-cache* is specified, the save will avoid the file system -cache, although this may slow down the operation. +cache. Depending on the specific scenario this may slow down or speed up +the operation. + =20 The progress may be monitored using ``domjobinfo`` virsh command and cance= led with ``domjobabort`` command (sent by another virsh instance). Another opt= ion @@ -4027,6 +4031,12 @@ based on the state the domain was in when the save w= as done; passing either the *--running* or *--paused* flag will allow overriding which state the ``restore`` should use. =20 +*--parallel* option will cause the save data to be written to file +over multiple parallel IO channels. The number of channels can be +specified using *--parallel-channels*. Using parallel IO channels +requires the use of ``sparse`` image save format. Parallel save may +significantly reduce the time required to save large memory domains. + Domain saved state files assume that disk images will be unchanged between the creation and restore point. For a more complete system restore point, where the disk state is saved alongside the memory diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index f3da2f903f..3b765a95b5 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -4145,6 +4145,14 @@ static const vshCmdOptDef opts_save[] =3D { .type =3D VSH_OT_BOOL, .help =3D N_("avoid file system cache when saving") }, + {.name =3D "parallel", + .type =3D VSH_OT_BOOL, + .help =3D N_("enable parallel save") + }, + {.name =3D "parallel-channels", + .type =3D VSH_OT_INT, + .help =3D N_("number of extra IO channels to use for parallel save") + }, {.name =3D "xml", .type =3D VSH_OT_STRING, .unwanted_positional =3D true, @@ -4175,6 +4183,11 @@ doSave(void *opaque) g_autoptr(virshDomain) dom =3D NULL; const char *name =3D NULL; const char *to =3D NULL; + virTypedParameterPtr params =3D NULL; + int nparams =3D 0; + int maxparams =3D 0; + int nchannels =3D 1; + int rv =3D -1; unsigned int flags =3D 0; const char *xmlfile =3D NULL; g_autofree char *xml =3D NULL; @@ -4188,15 +4201,30 @@ doSave(void *opaque) goto out_sig; #endif /* !WIN32 */ =20 - if (vshCommandOptString(ctl, cmd, "file", &to) < 0) - goto out; - if (vshCommandOptBool(cmd, "bypass-cache")) flags |=3D VIR_DOMAIN_SAVE_BYPASS_CACHE; if (vshCommandOptBool(cmd, "running")) flags |=3D VIR_DOMAIN_SAVE_RUNNING; if (vshCommandOptBool(cmd, "paused")) flags |=3D VIR_DOMAIN_SAVE_PAUSED; + if (vshCommandOptBool(cmd, "parallel")) + flags |=3D VIR_DOMAIN_SAVE_PARALLEL; + + if (vshCommandOptString(ctl, cmd, "file", &to) < 0) + goto out; + if (to && + virTypedParamsAddString(¶ms, &nparams, &maxparams, + VIR_DOMAIN_SAVE_PARAM_FILE, to) < 0) + goto out; + + if (flags & VIR_DOMAIN_SAVE_PARALLEL) { + if ((rv =3D vshCommandOptInt(ctl, cmd, "parallel-channels", &nchan= nels)) < 0) + goto out; + + if (virTypedParamsAddInt(¶ms, &nparams, &maxparams, + VIR_DOMAIN_SAVE_PARAM_PARALLEL_CHANNELS, = nchannels) < 0) + goto out; + } =20 if (vshCommandOptString(ctl, cmd, "xml", &xmlfile) < 0) goto out; @@ -4209,9 +4237,13 @@ doSave(void *opaque) vshReportError(ctl); goto out; } + if (xml && + virTypedParamsAddString(¶ms, &nparams, &maxparams, + VIR_DOMAIN_SAVE_PARAM_DXML, xml) < 0) + goto out; =20 if (flags || xml) { - rc =3D virDomainSaveFlags(dom, to, xml, flags); + rc =3D virDomainSaveParams(dom, params, nparams, flags); } else { rc =3D virDomainSave(dom, to); } @@ -4224,6 +4256,8 @@ doSave(void *opaque) data->ret =3D 0; =20 out: + virTypedParamsFree(params, nparams); + #ifndef WIN32 pthread_sigmask(SIG_SETMASK, &oldsigmask, NULL); out_sig: --=20 2.43.0 From nobody Fri Dec 19 18:47:07 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1738954029; cv=none; d=zohomail.com; s=zohoarc; b=dR6er6A4hbC1MGU58V6+RNbQpfI4EHtUHCNGKZ5zFXarQ3oSrWBJdWx0VD8imMj6dF62tORnAZIaflmFza0OusoEV+bZZt3jtcO+68mRGTPWRjGhgCxVaaQnNdTCWtrSD0Q48qOoAjtCl4ovppo+HwqBecFSHjzlY/uIePnojeA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1738954029; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id; bh=Jti9dNX/G/ldaL2dgTeNz3m3CY1jr1kpiS+blG1iHus=; b=Av3zC2Z6riRpQMrWZdFArTHm+7VPCp+km15qHJjFMuctXVnw9VqEhRTS3I9IqGW5Ab5AIpVnpv/HXCdbAcfbC+jVDzC2pFAkLezg63DoI7F1C0YItB+QR5bZHgYRhIYb2Zy+gBoLPrxr++5BrAUi7cuUPVYkkvzIboSkBK8/+3g= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1738954029076532.5649664947633; Fri, 7 Feb 2025 10:47:09 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 05F1F1273; Fri, 7 Feb 2025 13:47:08 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 3EF90188E; Fri, 7 Feb 2025 13:38:45 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 9ABBB1526; Fri, 7 Feb 2025 13:38:39 -0500 (EST) Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 5156815ED for ; Fri, 7 Feb 2025 13:38:16 -0500 (EST) Received: by mail-wr1-f54.google.com with SMTP id ffacd0b85a97d-38dd14c99c3so146799f8f.3 for ; Fri, 07 Feb 2025 10:38:16 -0800 (PST) Received: from localhost (205-201-32-8.scinternet.net. [205.201.32.8]) by smtp.gmail.com with UTF8SMTPSA id d2e1a72fcca58-73048e20bcdsm3414858b3a.178.2025.02.07.10.38.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 10:38:14 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1738953495; x=1739558295; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ed2LrTcoreB0iykXumDt4Bm22zKg73qT+e9imTPqhTA=; b=Zt8DDcvA6H0J3TA4annUrhgEbjVtzHKGR2vV36R0a3i+ciS8zC4YXZoBdjBDwuFrMl GbtywtByO9JFzFmya2R4FpMGGlYxXFJzbaosESDT4Gv54yISU/H8YWrwKjEtAQlr9gLk BOL2pkvIqhyGHim6DIbn5fOwKAY2T3CSVIBafdFsEZsL6K8rxUalPPXHHbQ/vlKj89yl jzswOlVHcgxwh0DpWdmYQlj6JScAWQZBrAklQCb6mI63nbAeT3CeAsSLrhkomEsEyA8/ QLscurdXNr8Wo6AoeWz5feLoN05jE6jHatQN05NUaNVGw9tA+zPsApwN4tETHnAw7LXI VJrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738953495; x=1739558295; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ed2LrTcoreB0iykXumDt4Bm22zKg73qT+e9imTPqhTA=; b=xSkipfXk+rJZLbcRD+SDXJbovLTaRkKa6ukENgIDOuqdSZC1E+WVunOhvPZS9qe27Q jNeYjMWVXfcI83TdO1lPxwXYNAIjO8dZ1URXXjtywlJ9785z9AQZ+NiHayQ8QITM4Grj JnSgnswekp6P9dYkWrmtSl3Ids5F8H7uNLLST8I5NOrMc5tzg9nzNALjK8zaxcHeRptw G+8TR4JtTffu9+OPG6D6yA6LwQmjTO/VMgq2ezWX1YnY78attpVDJjfGvEWztcWPTI7S 6Yqu9WDQI4WK2+OR77dNGBHGYeLtmYgpiVxynlldlZLu/0UxZnljUx4e60B2QD1t3hS2 y9Jg== X-Gm-Message-State: AOJu0YzxHyFO+cnAHqVHjutRCHu8cUkTLix4/W6VYM5JDw3ANm0teRHz wi1KHG2U49CsiGWNazyofJoCStSTTKRPGc2QI5VNLNtIcmu5zSFOwzGzoJU63zWNN99iLrhAs+j z X-Gm-Gg: ASbGncsHyHiaJDZkl3ipw/vXPGE6h6Z+jHUWsY6U5r6553McN6QvaMmR3SJDNkzUb6M iyTnNpcLb2N1fZt+hyvH8vpuMogrRkmKFtzH/u729fEYKaOXx3elJTHBlTUnuuv9JFApKZavJ2z eBli+5qPj8OPa85gxXBGEdTbmeQaeteN1YHTCMlaKSgXSDYnQEgikla1cnWCPbnhwPBiyFGaJOs bEdyE4wqZmSUIlWl5l2m3IUsl+Mz4IIE0fERjGV0pGpuy7cP7ejMTshjOw9+07iIrZlViTLFcBa 1stUjsIUdK/1M5DKqR2+0YLMZLOJ2yYVig== X-Google-Smtp-Source: AGHT+IGvwpa8M2HS4Ru5T54bXu3dYHM1Gh9OSXG6ntFJmWDi6KfnBgcWWgAIeOt7gMPk3Lk2M1SSPA== X-Received: by 2002:a05:6000:1acb:b0:385:f195:2a8 with SMTP id ffacd0b85a97d-38dc90ee7dbmr2720340f8f.30.1738953495199; Fri, 07 Feb 2025 10:38:15 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V3 19/19] tools: add parallel parameter to virsh restore command Date: Fri, 7 Feb 2025 11:27:30 -0700 Message-ID: <20250207183730.21686-20-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250207183730.21686-1-jfehlig@suse.com> References: <20250207183730.21686-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 7EY53SVJX7C43OGQJKIGD4QD7UNEAMG5 X-Message-ID-Hash: 7EY53SVJX7C43OGQJKIGD4QD7UNEAMG5 X-MailFrom: jfehlig@suse.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: farosas@suse.de, Claudio Fontana X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Jim Fehlig via Devel Reply-To: Jim Fehlig X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1738954030802019100 Content-Type: text/plain; charset="utf-8" From: Claudio Fontana Signed-off-by: Claudio Fontana Signed-off-by: Jim Fehlig --- docs/manpages/virsh.rst | 9 +++++++-- tools/virsh-domain.c | 39 +++++++++++++++++++++++++++++++++++---- 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/docs/manpages/virsh.rst b/docs/manpages/virsh.rst index 959393be13..0b02975cc5 100644 --- a/docs/manpages/virsh.rst +++ b/docs/manpages/virsh.rst @@ -3948,12 +3948,13 @@ restore :: =20 restore state-file [--bypass-cache] [--xml file] - [{--running | --paused}] [--reset-nvram] + [{--running | --paused}] [--reset-nvram] [--parallel] [--parallel-ch= annels] =20 Restores a domain from a ``virsh save`` state file. See *save* for more in= fo. =20 If *--bypass-cache* is specified, the restore will avoid the file system -cache, although this may slow down the operation. +cache. Depending on the specific scenario this may slow down or speed up +the operation. =20 *--xml* ``file`` is usually omitted, but can be used to supply an alternative XML file for use on the restored guest with changes only @@ -3969,6 +3970,10 @@ domain should be started in. If *--reset-nvram* is specified, any existing NVRAM file will be deleted and re-initialized from its pristine template. =20 +*--parallel* option will cause the save data to be loaded using the number +of parallel IO channels specified with *--parallel-channels*. Parallel +channels will help speed up large restore operations. + ``Note``: To avoid corrupting file system contents within the domain, you should not reuse the saved state file for a second ``restore`` unless you have also reverted all storage volumes back to the same contents as when diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index 3b765a95b5..8100765341 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -5281,6 +5281,14 @@ static const vshCmdOptDef opts_restore[] =3D { .type =3D VSH_OT_BOOL, .help =3D N_("avoid file system cache when restoring") }, + {.name =3D "parallel", + .type =3D VSH_OT_BOOL, + .help =3D N_("enable parallel restore") + }, + {.name =3D "parallel-channels", + .type =3D VSH_OT_INT, + .help =3D N_("number of IO channels to use for parallel restore") + }, {.name =3D "xml", .type =3D VSH_OT_STRING, .unwanted_positional =3D true, @@ -5310,13 +5318,16 @@ cmdRestore(vshControl *ctl, const vshCmd *cmd) const char *xmlfile =3D NULL; g_autofree char *xml =3D NULL; virshControl *priv =3D ctl->privData; + virTypedParameterPtr params =3D NULL; + int nparams =3D 0; + int maxparams =3D 0; + int nchannels =3D 1; int rc; =20 - if (vshCommandOptString(ctl, cmd, "file", &from) < 0) - return false; - if (vshCommandOptBool(cmd, "bypass-cache")) flags |=3D VIR_DOMAIN_SAVE_BYPASS_CACHE; + if (vshCommandOptBool(cmd, "parallel")) + flags |=3D VIR_DOMAIN_SAVE_PARALLEL; if (vshCommandOptBool(cmd, "running")) flags |=3D VIR_DOMAIN_SAVE_RUNNING; if (vshCommandOptBool(cmd, "paused")) @@ -5324,15 +5335,35 @@ cmdRestore(vshControl *ctl, const vshCmd *cmd) if (vshCommandOptBool(cmd, "reset-nvram")) flags |=3D VIR_DOMAIN_SAVE_RESET_NVRAM; =20 + if (vshCommandOptString(ctl, cmd, "file", &from) < 0) + return false; + if (from && + virTypedParamsAddString(¶ms, &nparams, &maxparams, + VIR_DOMAIN_SAVE_PARAM_FILE, from) < 0) + return false; + if (vshCommandOptString(ctl, cmd, "xml", &xmlfile) < 0) return false; =20 if (xmlfile && virFileReadAll(xmlfile, VSH_MAX_XML_FILE, &xml) < 0) return false; + if (xml && + virTypedParamsAddString(¶ms, &nparams, &maxparams, + VIR_DOMAIN_SAVE_PARAM_DXML, xml) < 0) + return false; + + if (flags & VIR_DOMAIN_SAVE_PARALLEL) { + if ((rc =3D vshCommandOptInt(ctl, cmd, "parallel-channels", &nchan= nels)) < 0) + return false; + + if (virTypedParamsAddInt(¶ms, &nparams, &maxparams, + VIR_DOMAIN_SAVE_PARAM_PARALLEL_CHANNELS, = nchannels) < 0) + return false; + } =20 if (flags || xml) { - rc =3D virDomainRestoreFlags(priv->conn, from, xml, flags); + rc =3D virDomainRestoreParams(priv->conn, params, nparams, flags); } else { rc =3D virDomainRestore(priv->conn, from); } --=20 2.43.0