From nobody Tue Sep 9 19:05:56 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=1737588271; cv=none; d=zohomail.com; s=zohoarc; b=X5CQqL6G1G7OiasbQplzduZfSxCbX76Ph0h9Hu/DUvN4BKcBNTwkEHMLZRJkpTdFxg1Ier2LrVCvNjHKP8sfNfMJGeIdTUq3vXXrNg8pcrIyg2XLKhearGYWgyoNr7xDp1PSFDREtfuOaZqzwcGW7YLDx+044lPJX02GMqU1tbk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1737588271; 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=J298SfjeURsxg7Nb20XR/IIdlxxT+0G6gmijaHP83I8=; b=mSfeFMmNcvseby5GbB+UjzKn4rIcgeMvwYmXV+VvVn87K/+/+eOi6RCcCzEz9b4e0ftBr+wECwLppk6rCZ0A1uN4Q1SuR+iCLp1Zd5PYh3CrkS+C+QXlNbbM8Lu3YlEWFfujTAVu5O6MDTIjMDpD7R3j/k7iNTql1uNwJmo02cY= 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 1737588271001732.1532079302706; Wed, 22 Jan 2025 15:24:31 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 4954E1310; Wed, 22 Jan 2025 18:24:30 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id A1E891381; Wed, 22 Jan 2025 18:22:43 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 536DF12EF; Wed, 22 Jan 2025 18:22:38 -0500 (EST) Received: from mail-ed1-f53.google.com (mail-ed1-f53.google.com [209.85.208.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 0AACE12A2 for ; Wed, 22 Jan 2025 18:22:33 -0500 (EST) Received: by mail-ed1-f53.google.com with SMTP id 4fb4d7f45d1cf-5d9837f201aso2745699a12.0 for ; Wed, 22 Jan 2025 15:22:32 -0800 (PST) Received: from localhost (75-169-8-111.slkc.qwest.net. [75.169.8.111]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21d1c7206fdsm41885575ad.25.2025.01.22.15.22.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Jan 2025 15:22:31 -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=1737588152; x=1738192952; 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=WIsSuWnmSMag+pChvRP5HsOxQLOWW/Mf7UN0DDTLGwQ=; b=PkIdCydukStXpdOuUyWSEZd52QtbsfibzPCOZDyN0kcwb1zO4Jvrv95BwdxGvJqLW6 XBGnLrZxg8rleCxok5Gj16DRy884mCtwWyz+c4hDFhLQFlgPXlantY4szmdVcGFxSmDO ttQIzKfXfFRz7rVnQMKMVxGzQ74onLYjol2zSyUQrykuoKxLyrZgQJ7UN5cLCfwXZwzT hQvj+h2TDqvmy6/xgSi5Oe6Fa3ycxWXVrdqDVGLz0LIFEkdRLFxvdPOzfaP9NweyL+O1 HvD6r1Td/Iw1gudmx4fFSv5DnILlGY7LD4/VgC9x53DVqnHG3Rgf49SYExIte/9TJ/Qn /+dg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737588152; x=1738192952; 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=WIsSuWnmSMag+pChvRP5HsOxQLOWW/Mf7UN0DDTLGwQ=; b=HcuNxs0hBlYTmfTI7QmAkTriwGrc9oTVCP9CatqfmCB+5J7pOM59W3XDfcs0tlHvxa qlqA25jVBb6KZKR5/7M3aFcpB+lPey5n+YzMHqQLTI1LB5g5e6JAPjT9wCXkYAfBsNo+ HUHq64Vsib3osKCNXcsZHJ7yhYskAb86uzF9h1z5OzRk91edhYGWLlvFUoNp/vV3sJu/ FrQvyRrMRbLZSoFW29RIHtYOR3OBbIBukfhSaMl4QtFVNHl1tirDkPw38HTEQ5Im2Zv9 qzaQlROpjBTcESqsQMU7vWfCFGQSLAczou+vQFeFeTlwo9reGgJEo8x293GTTLLwGtss U6lQ== X-Gm-Message-State: AOJu0YxQ1VS6ui9JCWKiSOLDW1A8ZMoCvlD+Ni5MpBtZstiMe0LOM4w+ QsLAjnAGCdcAUnjz80fnPYkZiFHve7Qqt/EmF2UiTtLFh297LFeM8R6kCeAtgjGTTl62tF1MuLm h X-Gm-Gg: ASbGncvLnOfH8My1QmtYeRjfHGcWmAQ5wAhMMydaxDXFCT0BSIRMRCh7PV5f7AL2zRa yw9tG3LUM6p/qSDLgxF6++o7cWKtEALy37eb3QgjTC9XrGZbC84GeEXMiTG2AnyX0kJKa1dUhs1 2Mzxy7nRgO5zNzIiMfHpywCnLvffxY59WDt7nV4gwlgrKyXOOQgk0bllr9SovGR5m3m0jNf8kSG F5n4PthsdrpVJ8mUXqqQqO/oJfnjrlz1TNPgmkd70+mvw6oxxGJIsUT4xGTV8ow6OsjTn5gLjYN DT9N/ORqhDBy1EdUlGrKyRk= X-Google-Smtp-Source: AGHT+IHVNAGlyp9mtls3hPJRCm0YzS5DgVkG9ETGVBAAG7blxPA5FX4qqLOzavpa2LNdMH6niAs3ew== X-Received: by 2002:a17:907:d8d:b0:ab3:7723:941a with SMTP id a640c23a62f3a-ab6629074e5mr86188366b.6.1737588151798; Wed, 22 Jan 2025 15:22:31 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V2 01/20] lib: virDomain{Save,Restore}Params: Ensure absolute path Date: Wed, 22 Jan 2025 16:16:35 -0700 Message-ID: <20250122232228.19306-2-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250122232228.19306-1-jfehlig@suse.com> References: <20250122232228.19306-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: LZTWNZJSIX7WWYHVB5F5VSBUN5BBK4EN X-Message-ID-Hash: LZTWNZJSIX7WWYHVB5F5VSBUN5BBK4EN 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: 1737588272454019000 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 e8e5379672..3fb091f240 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 Tue Sep 9 19:05:56 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=1737588211; cv=none; d=zohomail.com; s=zohoarc; b=KcdyUssB+bVYJa1K9ZzXXdhP2IvkbA6ryWYXKpISSYkJ8roSHMN/+Oz+aCLS1h554upjxNoTVLJUekDYBZcgIAWte/jOZFNkQ77Fd297ksmJ7quBSnq/OlmsW+BAF2VhCE+z34oaPvv+n7JijnsYNSKLVTe4HMq9qfFOZGCopz8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1737588211; 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=ghyJ7W42E8o9gskOGMkRlXRBD7jftebJNTyzIJ6nBXk=; b=XUpvHXgYRXGN6A+uuRbRT/oFzPsgdAPGCPQpYzC4rcoFzxZ4XseuKuyU7ha1b3xkcxBNgOrR5HhBhfEIPSUtem6oooPjlfZZr/NyZ9jJfuTPDzQGfD67ECWP1t4EredEa99iXZD78T52Ybut6Y/8ODKWmO4uLM/Y6cebPcPQttA= 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 1737588211545713.6131729163999; Wed, 22 Jan 2025 15:23:31 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 1667312B3; Wed, 22 Jan 2025 18:23:31 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 2AFE51360; Wed, 22 Jan 2025 18:22:40 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id F2DE212AB; Wed, 22 Jan 2025 18:22:35 -0500 (EST) Received: from mail-ed1-f53.google.com (mail-ed1-f53.google.com [209.85.208.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 A96E312A9 for ; Wed, 22 Jan 2025 18:22:34 -0500 (EST) Received: by mail-ed1-f53.google.com with SMTP id 4fb4d7f45d1cf-5d90a5581fcso595166a12.1 for ; Wed, 22 Jan 2025 15:22:34 -0800 (PST) Received: from localhost (75-169-8-111.slkc.qwest.net. [75.169.8.111]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21c2d42cb87sm100255885ad.254.2025.01.22.15.22.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Jan 2025 15:22:33 -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=1737588153; x=1738192953; 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=SllcJyCwXpZR2Zxu1jf/zOU24K1J6KkD3H2UAMAe1Is=; b=R0FVLCX7q25mrBvQXlUBl9fhFOV2jKY1GGtwUYD46KhjxxZd8lj9tTeoyAypMTOIRI egbswLYczu460QqQUzYn/h1txNOdmKQCeU8Mm9u8mIEaRN05k0bK0yIFlNZWSlemGSQE JhFIYmtUIgBhTcZAA4gQHuTwoVtHQVvEj8RbZDCawwuD72fGY4AsyBObaFyR6jGL1RWh djUqZ+I691d+T8GpkbwSWfGWC/xYwEzIV8mX15xf6L9PWVKJ9lsXoRN3XXOoAdi/oMoe VGP1orW1NN9+G+cef7Ll3BzissOzNvJTb9N9Qg9RzIgHJdiKda67PmggnDLfBGP9G6gk 88SA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737588153; x=1738192953; 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=SllcJyCwXpZR2Zxu1jf/zOU24K1J6KkD3H2UAMAe1Is=; b=PvXEEkG10PQWCShIeo25eNaicMDN5YLCmyuiO8xSDi7Vseqe4q30pY8vWrEbvtwhBE 1bYKlFF/dxJfi9aKKumbRq1SpYBtFIYasnmRJTPSmq9UjHnlXfhja63WZK7QvhxAtN3e LiKD+hjhM0UKshrtRzwHIxIaki7oBKU+5VgKBGkY7AILOMfUfbahPpA/mvxoHrqy6Mm/ GQQD7S6GlBzTC36JblxJT7CBdpvcPEGrrr854Nl1hiERaJ6J0nFT/1+9bWRsb5feNq7B QCoLg1OWqTpHEFhHvG+8EE1MASzuKZk7yZoDje9F6HlwpckFX88c9sx0OmUCBpezmGy4 4gdw== X-Gm-Message-State: AOJu0Yw/H6ojX/2eXye7ftMgkjUQia/UAuRyM+Ov8GbqxOIEzKsWhf54 ln4jajozhJTYdonRQsTaJxPtXUIxI7ocw5qeoVw5igcFA9Q2YdC1nlGx3ekBwhjC7mmH9uSrTts h X-Gm-Gg: ASbGnctEUaRF8LiNJsffjcWwhnqAfdzxY5UQhcppSPCKs+mmoq4c1fO0Ro0oNM8zudT 9tlSWiC0H0bNENACQHB6QtMF9cFMxE2OYt1fpTtiyo6qnS+yAeo44F/p7eGKY8AkPvN8XuwHZxH 6hzq0SKG542ELgkzPX8QqapZ35AF+GrwO8/MU5UwY798qrvBF8OK9hvZZ8nQ9iQ95ja6KUV5e32 9gvqOOCTNI3yrA9nXw+NnxJ5j1byKgPcA/k4I0lROphCexjQ5RuC7EAk4N1gGMcuLp5IaeFHMeP gh2WF4dhibd7 X-Google-Smtp-Source: AGHT+IEnJ0VcRcAZi0O4kj2fA/dugUqL9JmWM7BHxmrKtUjaQ4kSRCmRjfFI+bbtVkkAj8KTPA8xGQ== X-Received: by 2002:a17:907:3602:b0:aaf:74b3:80db with SMTP id a640c23a62f3a-ab38b0b90f1mr2282913866b.3.1737588153618; Wed, 22 Jan 2025 15:22:33 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V2 02/20] qemu_fd: Add function to retrieve fdset ID Date: Wed, 22 Jan 2025 16:16:36 -0700 Message-ID: <20250122232228.19306-3-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250122232228.19306-1-jfehlig@suse.com> References: <20250122232228.19306-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: MEA2KCFL7ZQA5TDDSPEL6FVFTDHNRWTS X-Message-ID-Hash: MEA2KCFL7ZQA5TDDSPEL6FVFTDHNRWTS 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: 1737588212260019000 Content-Type: text/plain; charset="utf-8" Add new function qemuFDPassGetId() for retrieving the fdset ID of provided qemuFDPass object. Signed-off-by: Jim Fehlig Reviewed-by: Daniel P. Berrang=C3=A9 --- src/qemu/qemu_fd.c | 18 ++++++++++++++++++ src/qemu/qemu_fd.h | 3 +++ 2 files changed, 21 insertions(+) diff --git a/src/qemu/qemu_fd.c b/src/qemu/qemu_fd.c index e847056573..3ae4a87a20 100644 --- a/src/qemu/qemu_fd.c +++ b/src/qemu/qemu_fd.c @@ -276,6 +276,24 @@ qemuFDPassGetPath(qemuFDPass *fdpass) } =20 =20 +/** + * qemuFDPassGetId: + * @fdpass: The fd passing helper struct + * @id: An out parameter for providing the fdset ID + * + * Returns 0 on success, -1 on error. + */ +int +qemuFDPassGetId(qemuFDPass *fdpass, unsigned int *id) +{ + if (!fdpass) + return -1; + + *id =3D fdpass->fdSetID; + return 0; +} + + struct _qemuFDPassDirect { int fd; char *name; diff --git a/src/qemu/qemu_fd.h b/src/qemu/qemu_fd.h index cd0ff2c690..dfcd5fb754 100644 --- a/src/qemu/qemu_fd.h +++ b/src/qemu/qemu_fd.h @@ -58,6 +58,9 @@ qemuFDPassTransferMonitorRollback(qemuFDPass *fdpass, const char * qemuFDPassGetPath(qemuFDPass *fdpass); =20 +int +qemuFDPassGetId(qemuFDPass *fdpass, unsigned int *id); + =20 typedef struct _qemuFDPassDirect qemuFDPassDirect; =20 --=20 2.43.0 From nobody Tue Sep 9 19:05:56 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=1737588237; cv=none; d=zohomail.com; s=zohoarc; b=fCRduzN6J4F0VBa/S267/Sg/8fugK1kVf5NksFRsl0Ardtj7GcNRDASbfukhh+qNs/uD5S0IOqhmkxp7JfWktfKrzJhzk0+IWE4MEPlC92IF2QgytlJQgtjx5piPQgKH3iHqdR1G6vTO5bGjb2roGNRE51LauC3mlK1IJHmVFxQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1737588237; 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=cF4wQvjG0asAAxKmTAta3pSOwim1g/KqPOMGW9XmUp0=; b=KFl5fsQtWNK8DP8ZlsJ8fixWPDXgMIF7S2TtFa1SijSCj470KQ0V0IVrn1ZQuS7cXPxyz4MOP/9AdQAivdmiIl1y5wWabMP8VQYLt9HzqO8v1iBiQHnsdyITifqs4PL/TCyF/U2B+buiysZW+0MiZSrnR+S3lCkuuAdIboBEknQ= 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 1737588237011204.72459119259247; Wed, 22 Jan 2025 15:23:57 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 6A3A113DF; Wed, 22 Jan 2025 18:23:56 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 5D37F1372; Wed, 22 Jan 2025 18:22:42 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 1DFE312AF; Wed, 22 Jan 2025 18:22:37 -0500 (EST) Received: from mail-ej1-f49.google.com (mail-ej1-f49.google.com [209.85.218.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 7643E12A9 for ; Wed, 22 Jan 2025 18:22:36 -0500 (EST) Received: by mail-ej1-f49.google.com with SMTP id a640c23a62f3a-aa6a92f863cso66935666b.1 for ; Wed, 22 Jan 2025 15:22:36 -0800 (PST) Received: from localhost (75-169-8-111.slkc.qwest.net. [75.169.8.111]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21c2ceb9de7sm102473595ad.96.2025.01.22.15.22.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Jan 2025 15:22:35 -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_H3, RCVD_IN_MSPIKE_WL,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=1737588155; x=1738192955; 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=lysVoi2rJMvW1CptNDj2VguhW/zUT7RN/bGAus/OLYc=; b=YCfYcswZMGbsJmmyY4yebMpTdBUv2bR+wxmhhbUzCadCOsl76slhufVfi55Lg6nkG5 pSEvQafsNw+jYuYDwhJ4NCODbWmr3SqT9/76LZVsMpF0whCkmbOCMW3Oa7pIZr04VUQ3 hx5Vi7WFAfL1ixcCS7RmDQkZd+cXmu4U4XQhByZw13VezrbyM0tGvnmmFgVLPEN8CO2p kqKIzD+fPQGLMJrcJjtDtYUu/qUkR2r6G02If184YqOCBnYASYxoHfD9TXwMgsSJN+ik S765Jan5WL0A69h1GbMOFzdmmRH6wzR5NaFEC5VQ9kOTetgN67Hk6Lq+Ymyz63zYPo2o GhEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737588155; x=1738192955; 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=lysVoi2rJMvW1CptNDj2VguhW/zUT7RN/bGAus/OLYc=; b=fHTbyO5JwqAnoDYy2AJGzLFnaZazNZRIBX7zTNoeq7JQUyHmcObaGVqf2ROcT+E0Sz eCscrX9FnrbaR1fI/fvq8uG5Zc1FTzYnaZe2AmXzEu4AnD0u8JmtVDogCkZ9uf3yoiew R3VdnuOrBTVoJWQ8aH2GIilahZBaHA/22tS+fFBpBvhHHF/WYtFKWkhRHkfMHt2Uevs4 J6NzXyQ8rk063ij+sFb5emhSaMbP9Ab1KkZWK8mkD2MFR41EC8Qu50rsJwYdPT23qe6J /vTqAU8zWu7lZlAjkCg1JTNip10ODEQ1tcu8L9ZbiAvXFqX2/hDhS/huzkXvJApvwFAG ZpBQ== X-Gm-Message-State: AOJu0YzvPc+0wjaLVFJUxv0ois9EJnld9EfBl/ZePreov0gUiSTBHuO2 o+izR6MPa1wqS5KfhTyq8hOII+4nxggUH0Ji+JTNQ/5QycR0sgbcjxQ0GAOEHZ68byZn0t7j43C V X-Gm-Gg: ASbGncuiZHSFU/oOVuXTlqA1F4nrR8NGNpY/enYKalVDBfJ758zq9Sp66KaN5BzcJzF xX6bXPZeNcCkgpu54cZSxWoE/SlB+CNZGlwX2VzkscoV9mLGP1LJyAt/EE4st/rel0frywPX03W VUUq9VVaXR/gHbc7tBHUgUq2sL1ssQEh+AoQ/dpvq05axX49QA/Vj4FnkNoRFmOXaYMtCrSDq0F cWvEVQsDeUnu8ot3mdu/C+WxlB/fHArzM0XxRjWGdSvU1ge+p+GwRqUVUph3WzE5cqW9qmOj54D a57oATdiUKHV X-Google-Smtp-Source: AGHT+IG6/ghFlt1L8krOak5s4rZgs2SHBm7vNRK9J5b4RVjhTEJUTOm7qKKFR7ysHKSyRW1V6Ss19A== X-Received: by 2002:a17:907:7da7:b0:aa6:8b38:52a3 with SMTP id a640c23a62f3a-ab38b4af7a7mr2146320066b.50.1737588155417; Wed, 22 Jan 2025 15:22:35 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V2 03/20] qemu: Add function to check capability in migration params Date: Wed, 22 Jan 2025 16:16:37 -0700 Message-ID: <20250122232228.19306-4-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250122232228.19306-1-jfehlig@suse.com> References: <20250122232228.19306-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: EUGOJWNEIJUHJBZUEH5AVLIGEOLSWKKI X-Message-ID-Hash: EUGOJWNEIJUHJBZUEH5AVLIGEOLSWKKI 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: 1737588238223019000 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 98822012cc..c3c9120c22 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -1303,6 +1303,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 df67f1fb92..020071e8ef 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -136,6 +136,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 Tue Sep 9 19:05:56 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=1737588293; cv=none; d=zohomail.com; s=zohoarc; b=U3+vewFZZ+S1k+00MgPdqv+vWxl3ZkE+WsmwTh/Hk3E8xpbYEf+RpP7dFbIMrqfjjNmuniZp5fVUAmf0qSfuxzBmKj2grzfioo5YM2H6yj3tK0HCTZIuv7laoc9I4B4+sKlXU6s3n3Q/CTFyg3CKkSmb9pp4TwjTzYHcHB82JOw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1737588293; 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=siNZW2j0ef16Yg2myiEKEIMSdnqh438QpaZ/w9JC7bo=; b=FlSsLJt5XBExjbSMthvl9XlZOMqXS62bUmyowzkYtdZbb+KsdzUY/bU/GLukct8jN4tMfqm4QWTnPJ6wsSOTY19Pk1ZmV9pW8aH3zGzwnJWWBoU8DwM4kT0UQphEAQgo/w7DiKJZhdlxoctPCfHTcfTbW8v6G+fJ0XSwehRNt3o= 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 1737588293039965.9548584156269; Wed, 22 Jan 2025 15:24:53 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 6CEB213D2; Wed, 22 Jan 2025 18:24:52 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 822641354; Wed, 22 Jan 2025 18:22:51 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id B2FF012F6; Wed, 22 Jan 2025 18:22:47 -0500 (EST) Received: from mail-ed1-f42.google.com (mail-ed1-f42.google.com [209.85.208.42]) (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 7168D12F9 for ; Wed, 22 Jan 2025 18:22:38 -0500 (EST) Received: by mail-ed1-f42.google.com with SMTP id 4fb4d7f45d1cf-5d4e2aa7ea9so628820a12.2 for ; Wed, 22 Jan 2025 15:22:38 -0800 (PST) Received: from localhost (75-169-8-111.slkc.qwest.net. [75.169.8.111]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21c2d402d4bsm100547185ad.230.2025.01.22.15.22.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Jan 2025 15:22:36 -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=1737588157; x=1738192957; 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=5lATCGLy8OX42M9thBfHKrGCA2JBQKXNCnzFF8SUZ6k=; b=BuflpD1JWbSCr0mNNA7R+wVknLwvTyzei2SWva4HhvMcIg9k3eZa0gZzfJtzv0H6zE WXxSBB0QGqY2J4GZCFlaTx+ZTfW+EXy4Eu8tGRlNi5BhTsfT/UQ92Ek6SL4t//z1ZHq3 bfBH1Y3jPR9dLceoAC570Q2NMgUjCeaBUsK4qNW1dpktQtwizDLUW3a7isV2ucxl3ldq mNVgbTxb7IQhYtyscVS2TOyh+GFcTh/6rDlPk+ORcvGkj+u5m5bpwk/GwO11enEcZF0D A84qHavEqhpXITFyYjAx17JE8DN6I+EsHIRGZbcqHt+XMA1Ku1aFkS1yNrV8zeyagQXu 1mUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737588157; x=1738192957; 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=5lATCGLy8OX42M9thBfHKrGCA2JBQKXNCnzFF8SUZ6k=; b=bZB/JNroIsNd8h0cTdKqwEJp+3y+TjOTWxGArw6DFEkCTiXRa869uVZqtkDqZJHAt+ NlDpf4eOhjg2CbpOtm9qrNH1s2F7ePnbtmBt4T8tfzJEub+ZFoJblBuOzPlPC0886cLY gn3kVsJchn2rR00tb4x/d9D6e7fDd7YNKd+cTZznRSVBykgdGamwIbIDXVHGw6Bctkij nrtSRf90Z0nYYaZbGf1lwh/KvWxVD3lVfM5mBbqqqmwdHAgkI+Y5ggK6jNXICM91cO++ ZZGHonALOcTxQG/4VTNuZzXyKyLidcBCKoVpDDWi+g4tdkBcNq7gmEDFxPPS9mCVp5v3 183g== X-Gm-Message-State: AOJu0YxKjVo+pM04ifUQY+DqUsSrqs5ddICUVEIplM1kTV5MD+B/urfd +xFCQxUb0dn/NJ3YkOvvSU/ff4qNcz15zhdjgudwiBhbvYHtxkOr2SwqzGmFTPc2/0QbvISFB9D F X-Gm-Gg: ASbGncumgqRzNhWYZ/9UtzxX/r4OdEdZ/AVwUxPP1GPxjNCaq3lTADLbDaGtVg1Zw1w lPAZaUPVpOJZl8UhSR9Uikn9TNhzYY/dgTvtMiKKQOP2q2AesfTrmEdBLEwxS95MP/QnI0xbYGB hk5iyOn1DcGt+PwPM1oVccsd+UZSE3WSOXaJQ7a0Tkf2SwqlajcIQ1IiErdOJMH0Sa/dc/JntIb u/TOrl7zo+5roZyN5647uEvxKW2NoUaOqMETEBWKL9fwdt1XO4TYQ1AQSBZvo1OlTJZYY0Xp0LQ IMXu0/tKs7H0 X-Google-Smtp-Source: AGHT+IEX8sO9hPJWZhhQQD7pQp/5xDmY+NsCYOxOEJxMzeynqt4E4GK0FySKB9edFpbjDLuVT9Uleg== X-Received: by 2002:a17:907:7da2:b0:aa6:8a1b:8b84 with SMTP id a640c23a62f3a-ab38b5342demr2434283266b.57.1737588157202; Wed, 22 Jan 2025 15:22:37 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V2 04/20] qemu: Add function to get bool value from migration params Date: Wed, 22 Jan 2025 16:16:38 -0700 Message-ID: <20250122232228.19306-5-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250122232228.19306-1-jfehlig@suse.com> References: <20250122232228.19306-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 3JQ44BEVQVFZUGBWDBFSECTZPZLFTS67 X-Message-ID-Hash: 3JQ44BEVQVFZUGBWDBFSECTZPZLFTS67 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: 1737588294409019000 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 c3c9120c22..daa52269f4 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -1303,6 +1303,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 020071e8ef..64b2dde59b 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -136,6 +136,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 Tue Sep 9 19:05:56 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=1737588312; cv=none; d=zohomail.com; s=zohoarc; b=B8IJOYHIuQnj++5DqnEUgtvY3+Bd2VNTaFn2x4MAy6BlaLlVqHAR+Il9cFoj7SIePoBJm539vuNDlfaFsiSOVuzYfgZuNuWoQWe8ZSFaKwwl/Xw7uarvJY/ZqFFS1D4DZ2+EGTfAzzWe+40GGBqnG/IXKHcXPvj2cyKJp59Se4I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1737588312; 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=2GpfGO4dKg7mO6p+aAAz9ia9dTUDuaGst3zfEGDZYUc=; b=enX0G0Y51kOwbPJRtdT+zlKi4bHcu9+cMPHnO59/Ds4pmxu5Xx7nFzCrK5b8fk0X6L97qYPq5fsJRgBC2wtPwAKEEVgG3j/IebRiWUuA9xe9wKy1rbHRw+GhT/w66Zoaxdpo1t1gbBdZMwR1UaluBfVnIxubxnTC6KDNWubupyA= 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 1737588312361769.6760194471559; Wed, 22 Jan 2025 15:25:12 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id B87CF1420; Wed, 22 Jan 2025 18:25:11 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 0048D1326; Wed, 22 Jan 2025 18:23:03 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id B0471132E; Wed, 22 Jan 2025 18:22:56 -0500 (EST) Received: from mail-ej1-f53.google.com (mail-ej1-f53.google.com [209.85.218.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 579B0135F for ; Wed, 22 Jan 2025 18:22:40 -0500 (EST) Received: by mail-ej1-f53.google.com with SMTP id a640c23a62f3a-aaf57c2e0beso65156566b.3 for ; Wed, 22 Jan 2025 15:22:40 -0800 (PST) Received: from localhost (75-169-8-111.slkc.qwest.net. [75.169.8.111]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-a9bdf0b513asm9555385a12.71.2025.01.22.15.22.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Jan 2025 15:22:38 -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_H3, RCVD_IN_MSPIKE_WL,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=1737588159; x=1738192959; 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=G55YRvckSvfU0eo7NpOatax2mk8Q96jYqgDcRLNfsR8=; b=PM4YQgUM3ml7KctoL4n9k1Gipwq5scr44ifi05LrgD3VdPLuU7r+RHtr98rMJiyUA+ YW4X5afo9l+UQIUqAA0mcXyBZWTcyfBE9IAA+W2io7IQ1g1TnGPlhi6y4cRuXkcZIbf7 Q8TZwqXQYVnjXVhOiLNaKUwBhvMVwkeqaGP81XkN48zn2XdRkdnhSRdIe3PCEp1/XSBD 43K5pCmp6nW0owmOo4jzlE1+VuXRYbDGmnAsSqN58FvXP0rcZGKOhWob8+ibQGkokVf0 3asNmtefXcUivzs+OrFwVWiBbP//VOMq0Qe1VqsrNQLqM3G4FO9CjP3jNdg3PkDA9sDD 8inQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737588159; x=1738192959; 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=G55YRvckSvfU0eo7NpOatax2mk8Q96jYqgDcRLNfsR8=; b=griXXpl2qK4W/1ytHw6e3rcS8Q7OlA0iBxWadHUmLTa8vsj497fytjVZowFhn/AAoY zrwccVdv7WPLvEA7GtDFuJctgp5ManBfngNbZpO+Hc3ZMP6M8tiod+xTb7vZREu65jy5 fCov4IiFPfd5BaqwtQCuzeCezX1SQiwmnPfuSbAONGQGUxJR2je08PhIK+C9sVzhmDtm 8usC4+Rh6BzZ4xtiUSqVrHHbXfmpliZLeXY9VcK1gBQlzWBbOC7QKm4LQQ4Zh5CEwk+R 8e5PXqqx7R6/Pj9RkfOB7cViR9s1h9g4s6haHy2jZgJAltPziTS7BBY0Gw7wsSCuUITW bzqg== X-Gm-Message-State: AOJu0YxX2fjlz0c1by6kB9lkBU2Nj+wf3P93G3zh32q2+0YY08a1y1su gR80h5wMWFpYHnuPMZk3cx5Iyn1Aq/yQJaqvwxRb6F8JimM+KRL6ck+REVIHcNnfzzFp9WiRL6a A X-Gm-Gg: ASbGncsseOM5HV7dFYBRLRsI0Hg4gTPVpseZWSDBdbmomXE7GSnY+le32lFM1AYSatW 8fMlf1YPDtkPyoM3NSpojx5PoZPMr72xI0Yutb0keP1LxZ66NR5OZbl0pil+ShARNxtl7umIPDE 5+rwIqxE/0vSl3ppV/rMYgjrZsor7JtRAqfECYgDXbkkvlQMH+dy+VbveGFhUdDnlwq8WH5/cp7 IbfDEYwTiELL3yJ8L41DiQ8KbqK6DrT8dvfFEd3Snk+LkH8IoWh4mQeq+BC8eSK3f0mPKl4MHR1 GVBPewUC40J9 X-Google-Smtp-Source: AGHT+IHawHgrmU9JWGO+Fsp+Olr9msuF3AT7CTaKgyUmC7W+mM51dsBChqROP4mznuO1WhX2b3qjZg== X-Received: by 2002:a17:907:969f:b0:aab:eefd:bfd8 with SMTP id a640c23a62f3a-ab38b4c047amr2621142966b.49.1737588159151; Wed, 22 Jan 2025 15:22:39 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V2 05/20] qemu: Add mapped-ram migration capability Date: Wed, 22 Jan 2025 16:16:39 -0700 Message-ID: <20250122232228.19306-6-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250122232228.19306-1-jfehlig@suse.com> References: <20250122232228.19306-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: VSSSXZYETC772JAZH367EFUBSD3GBOXX X-Message-ID-Hash: VSSSXZYETC772JAZH367EFUBSD3GBOXX 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: 1737588314497019000 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 daa52269f4..03937df2d3 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 64b2dde59b..91a1965a74 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 Tue Sep 9 19:05:56 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=1737588334; cv=none; d=zohomail.com; s=zohoarc; b=IWBZlRY8NOMXvnQQ40/et8c3Ut8T2YRKEp5cFZfx7qfxyzJOAncJlhFTLRJCS4DMwvE6zEmOKif5XESUgw83lWf+TbaDwbVUPx35z9fcG+faMQeyMnPxzeh+bV0MdA34L0tXzU4kDNAvw8oFjS3YK6Xij3RrKSnAtMa3HfACbx4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1737588334; 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=JHVIwKEr6PyYxNBsY2IafI4Ia6aspHs5RmEcoQBSq84=; b=hZ8B7HRvslbcNwKQiENEr1A3RDPKlVd4FMsp0cSALBWemMWJNHH/9TS/Xax0Tp+INx/vceCa1geXLRCAbA1IxEHl5sBtmvQh0ks0fraaNtuVCqVCsKTaihSeY2lyzof5sFIE1DhFn5RfM5dJpYT6gvsebnJ4Zf1FcVX/T2x9T6Q= 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 1737588334220712.1762106806735; Wed, 22 Jan 2025 15:25:34 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id B3DC51368; Wed, 22 Jan 2025 18:25:33 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id C077412FB; Wed, 22 Jan 2025 18:23:03 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id D51131391; Wed, 22 Jan 2025 18:22:58 -0500 (EST) Received: from mail-ej1-f46.google.com (mail-ej1-f46.google.com [209.85.218.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 7DC871373 for ; Wed, 22 Jan 2025 18:22:42 -0500 (EST) Received: by mail-ej1-f46.google.com with SMTP id a640c23a62f3a-aaf900cc7fbso53167266b.3 for ; Wed, 22 Jan 2025 15:22:42 -0800 (PST) Received: from localhost (75-169-8-111.slkc.qwest.net. [75.169.8.111]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2f7e36ec871sm2067980a91.0.2025.01.22.15.22.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Jan 2025 15:22:40 -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_MSPIKE_H3,RCVD_IN_MSPIKE_WL, 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=1737588161; x=1738192961; 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=zvqd7NyA7vrcmqolS+3lRW1I24ZxW6+vYzn8D3U2J6g=; b=Ju5KBo2iHhiQPplte4TDqTSRNliWNjS1w+3pD56BzrvSy//QGElyN9Tj4lz8qdyo2Q V4ZIi6Zk3dn0tENnn0PKCOaNTIMBWWNpyokMJchk/ma/yzoukwYGl31R62Sf3RrfXcs+ okjd6erWdez9o3ZiUvSjsupUvq2pRQ4sZCzuthJcWu7n3fcp563LkzV0QYsqLPru2ZU8 NV075fbeLGXMBhNlF6LM0FZVIbI8hZa0PKMYhDGHY4QumjFL789JAiSnRb2evVFa0KJF qego6+HZ0aDf9ExIR2N6oGlgw1MsRvEg5mo0nsmTb6/I8jl8UlmRWv6+j7cpAdOT/mDT Y2DA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737588161; x=1738192961; 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=zvqd7NyA7vrcmqolS+3lRW1I24ZxW6+vYzn8D3U2J6g=; b=GLkhFxt7Uz6W4+9hDhhM3d6wVH+wZ4LBZ33yOOp7YMZrUEfd3spXCrCPKjAC6n/0K/ Y8dJVRggNQV1dyg9Ffg1gVryO02Gr/k+7aMrF1L/sB9djcFESzfJL3jxsTeQQUzU/4Zx +2llHAIuE5dLhjG4MxSSK9Y+Zr68tj2Chdop5gZjhKCjXQ7Nz6DtgosmgCPVhC6pfCpV WdtCLGcscT4I6xKcDGxmDfVLcPqltUZJXhgGGbnzG2lLVxIEhlZx5fkHbifpCPtSfaFv vRSsyksSqvzxkmEWxFJOikYmk7ighN9KiYx2qoy4LeF4qWEGx4PK3kJtzovMlWdVACb7 7SrQ== X-Gm-Message-State: AOJu0Ywnw24ij/ooqBe8SdY0jBvy3zUSbg9r8TbTGeSxwkjYcD8G7Rwt X6xHwEM1SuQxWJH1XAvi6lYzgD0xL5zYN4kNPLJ7uTN8SertCxnsKTy/H+QbpemDdMi8zbItsVe 4 X-Gm-Gg: ASbGncsTohIU7pXx7XkYVAsG7RL8nSUrq/4KrzW9cmNXpR3Mxq8nZcnm7DlQr5kkR2a zfbX6+muXG+wAREnOQJqho6bdCykjrtRd82w7VelYz3hCF1gbmvMIGfF9ZVsUBXhaE2oG8MppAY 9+BRk0KvDeWJ3ldoEay9pze6yn5A4j0FdTJH3Yx07Vxxm+4qUgj3qgP++Cu7KqsBgQn5iD6CFs7 a5WLvwqitfsxqEBeqLuarxfRV6NXaaLxiS0/TOd7NUCvkRQGO4+Vd8WE3g7GbUn6d5+KLYlKdG3 knWBEMoy2I7b X-Google-Smtp-Source: AGHT+IHn/mEJTCk51Ww8LAKEgdNcEskfn1IGb7BMjnT4KbEVsetG6QJ9M0Y2xwKjmYTUZV/RMHJreg== X-Received: by 2002:a17:907:2d2c:b0:ab2:faed:f180 with SMTP id a640c23a62f3a-ab38b18bf29mr2406481966b.33.1737588161316; Wed, 22 Jan 2025 15:22:41 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V2 06/20] qemu: Add function to get migration params for save Date: Wed, 22 Jan 2025 16:16:40 -0700 Message-ID: <20250122232228.19306-7-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250122232228.19306-1-jfehlig@suse.com> References: <20250122232228.19306-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: IDJTIYXSG7QYLARZLFY2E6FGZC67C63X X-Message-ID-Hash: IDJTIYXSG7QYLARZLFY2E6FGZC67C63X 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: 1737588334612019000 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 1582a738a3..d46a6e2e2a 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -7086,7 +7086,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 03937df2d3..0faeb6b0c1 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -783,6 +783,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 91a1965a74..bb24af4ef9 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -86,6 +86,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 Tue Sep 9 19:05:56 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=1737588356; cv=none; d=zohomail.com; s=zohoarc; b=LkytTMSP/08XAPfsfe3AA8BvEXcV2kCFn6y+pBqpJc2FtfjI5cMMLXaaodmVUf1Pu4WBOic0NwROcBFCv22ZocbduoD7pku40zTNMnKTQxhOQtIDB3kQYaWZiNuImDhaIv+1JWAuaEU4r18UFjsgHKHezJQjjsNhMIlyRzlRiHw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1737588356; 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=A/DK5cuzJAyOppqGdjS5jKXRTEEeVAhA0aR2xzmh2eE=; b=Cv2fqHrHj4SfiCg9OqouJVPSw3nKuzi0+OuwAQl+ke99sxZ/jluB9aw2N8sOH9pm6XU9M0Poi7Mu1XW4Sgs1ABDbFmpPl7Vg4BDu5Lwr02zS8wKNflqpJkokrZVllbtmo0RKbqk9DVi3WIeQLDAvtJzLNgIogeGBuQjEV2/CtHc= 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 173758835648193.3451888522859; Wed, 22 Jan 2025 15:25:56 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id C9E3A13F8; Wed, 22 Jan 2025 18:25:55 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 6C5A61353; Wed, 22 Jan 2025 18:23:06 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 7118412E5; Wed, 22 Jan 2025 18:23:00 -0500 (EST) Received: from mail-ed1-f43.google.com (mail-ed1-f43.google.com [209.85.208.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 5A42012DE for ; Wed, 22 Jan 2025 18:22:44 -0500 (EST) Received: by mail-ed1-f43.google.com with SMTP id 4fb4d7f45d1cf-5d3bdccba49so619514a12.1 for ; Wed, 22 Jan 2025 15:22:44 -0800 (PST) Received: from localhost (75-169-8-111.slkc.qwest.net. [75.169.8.111]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-72dab7f1925sm11493647b3a.5.2025.01.22.15.22.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Jan 2025 15:22:42 -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=1737588163; x=1738192963; 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=ZGilm2Ex9hDbV9sBzITBrtELXkK7mlQEFez+W78tXOE=; b=TdlfcJQFgQ90udrQMH3f9KkZaKD3z1EvEc20afxVPMrlQ37uOWao90fxH66J98Tkx6 9wNO7+nExgVVfXX1S0UXN9GoFHYQfQLqA0s2ZiNcOTlXao5CO87tRoxCOs+NdFaImU6G WtxbGGnE22PWqDc+zEB+7jA9kIB+f/iQ52S1sDNwAanCsg35bfHKD4Ovy50khd2jY4iz U2UPzMMyDGRhZrWaNgxr8njLYJZRDo4Izl+Kjt4+h7eooBXmPAE7vVdow0fJ4Gw7eNv5 M0QOzeT2PIwpPq0FQOIHpgDgqOEN5n28YP3cJ8iflirz18rYWSiKbi9SctiYO1pRTxy1 p/Dw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737588163; x=1738192963; 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=ZGilm2Ex9hDbV9sBzITBrtELXkK7mlQEFez+W78tXOE=; b=RnPOui7CSWG3O1URo1FtDYU9zDvJWhnUaQUE4JGBTeq/P+QathhN5A6gThCHf9xfq6 XlyEB1QqtTURMwUdDhTOJ4NGQNRzurIxBCCBV51Y2pF2iwUpL104IhfpK1HkeC6M6bOx EqiUenhIXYgYhh1Enw9RfcxLNCmoVdAkFCo9d0GDgIuImmXORaSbJVBfjNfKD7nxb+61 9kwZPlpfdHJ938jayzDgT6rUHdFkrJl4amnjTOzcXDktpijrYKGOHw/64uzhbg8BRW30 5eU8rGEm62F45ZUf9ev59fYm9bnJn0FJBqM6jlx0Mcz3+6ZsoG+TbBWR/yX+hiqxSXGK UVtg== X-Gm-Message-State: AOJu0YyfYZPrCxNmDQvni0U5VqSir5eCNiiJTOBOj0R/Y5SyqWlOcmw0 /6JXk+uaBaHDFV4M8K+OeglElDsPw9Aeb9ukMS0Zn77VfOzBrZOHNbpQnaYbg86YH5RQkH7bL1v 7 X-Gm-Gg: ASbGncvXdiBAtf42cZWTuQ8de6Hy4cZ99iCI2pZySvju3cyVVv0LN/akYTbvWzbsGA1 JhRE9mbb/O65gJZ8FjWgFwwgubQawKC0lvAMKGrVcfP61PUmOBMKoUMy3rLr0R2QwQ5gw0dOl92 M+BwaJjw8xQuZD0YkuOq+XiqxfzpDamT7LRXGa44+2wEoYy1RksrnujvzOjEyXe+NCY+7h/XDct VaKKlGeVqbFmSg6pcbLoRVeOIp6QHd8H3h+93eal5k4EJW6Zb6naUkXbkxfZjerl1NefcJc6Xit jzYqoc96mOlDxl6yXGq66/w= X-Google-Smtp-Source: AGHT+IFfB3a6/c5KQEJGrMgqacch0EN5gBD8TNVhB/e3tjvTh/yp4bmGIId88HihC97wXzqE1Mmnsw== X-Received: by 2002:a17:906:c143:b0:aa6:7737:199c with SMTP id a640c23a62f3a-ab38b26f3cfmr2090900166b.15.1737588163112; Wed, 22 Jan 2025 15:22:43 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V2 07/20] qemu_saveimage: add "sparse" to supported save image formats Date: Wed, 22 Jan 2025 16:16:41 -0700 Message-ID: <20250122232228.19306-8-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250122232228.19306-1-jfehlig@suse.com> References: <20250122232228.19306-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: O774FMACKVFK2EH46CIPRNEIXS4XUYHK X-Message-ID-Hash: O774FMACKVFK2EH46CIPRNEIXS4XUYHK 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: 1737588358759019000 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 69617e07eb..ff5b9e72eb 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 Tue Sep 9 19:05:56 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=1737588389; cv=none; d=zohomail.com; s=zohoarc; b=RWoK+ZNIJpCXPxbwozYN8utjYWV+nRdjt44vqTmiFOIkckZRjGLGIb8ScMExEMkrugRf3dmJBaC7Xe2TA65DUWUGs4GEOR4eTMxlBDs/0iodSVVU8p1wTFwUoetSJVDCgIFLhsfCPjoup33q0v5kLAu6WzX+0YzoryzTTBt+n3c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1737588389; 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=x3E/OlaDyLHdc/SlzSa2ffd0Nq8r6IRMhF5efLeIRN8=; b=nzEaI8PE2yR/mZjYsBkzWzDRYCgD59lhs8JBoWIIyHkhuC5GHUl0pPssDvWb5pY7GZJUDbPjmI4/WbCz7B2D0lBPUakU0Iu540WLw8a+mAYnj5URbxED8d4jVgb0Nz2UwIcqRjeSCC5zHJm04tsFCQJGRSaQ2SZrZyn3vIbdNnA= 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 1737588389746541.5570948176357; Wed, 22 Jan 2025 15:26:29 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 21F9E1354; Wed, 22 Jan 2025 18:26:29 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 7093313CB; Wed, 22 Jan 2025 18:23:08 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 6A259131A; Wed, 22 Jan 2025 18:23:02 -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 1CA00138F for ; Wed, 22 Jan 2025 18:22:46 -0500 (EST) Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-3862ca8e0bbso215412f8f.0 for ; Wed, 22 Jan 2025 15:22:46 -0800 (PST) Received: from localhost (75-169-8-111.slkc.qwest.net. [75.169.8.111]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21c2d3d7b0esm101268355ad.162.2025.01.22.15.22.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Jan 2025 15:22:44 -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=1737588165; x=1738192965; 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=sY2gUZMzogCtmcHJALvHGyD1TbymR6SMKOX+oh5HAJY=; b=es9SXWNE3WcFznCCzbhFwuRrAAQS7lr5hXUFv5bKmdIfk4PZpbMA4VId7IQ3LL7pDe Ize7oMlTD0QXUnNtLaJC9cV545mfa7MuUV5PvfgboI90vQChRNSsZbr7EwrH/VaCEXvC +fjZh4WD7AE5VBQb4gOYTsogR6RF18lpFXsMQKeR72mNZ0kR0CWS15rsx+MkxdtKikPn ur/zCraUwHciNrnr7it/GjSt6qf3C8bPybQTcPFx//r354EFj5kYIY1e1/Bsl92rfA4m Humt7CigleP5LcERWsNe62Pmy2fAUWNz/+NtCb7XSTnIS7A10VveRGaAmpTM3d00rmuP YcCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737588165; x=1738192965; 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=sY2gUZMzogCtmcHJALvHGyD1TbymR6SMKOX+oh5HAJY=; b=T25mjCFeOQ5tRCGLZ7IYh0c6WDghUlVjzdoJQRJprFyWd1uECcfdCJzOkC0F2zrMUs s0leLS9vTUjfoqzMa0nlLJ2MLd1d9YoDQ2S61BwDr7DX6Z6yUldR0eanEWs6Fpudziwt wGLQIJIVoQCXnjwP/bX8FenfpEY4HkAXtE5aFCodNi13fRtM7qtwVcOKUp2na85sFcUs +gq1sGp6c8PrKXRAmglyjpUF2mWfSBLdSNvUWSQkKan7F03qiauMTWKnnAL4aWEDqYmK V3/xTgTdn4g/ssPPZC2KN6S85gXzUacmndH1HzgF6Kz3SEyIgkANAXlhyu5Mym/QuUUB WY7g== X-Gm-Message-State: AOJu0Yw/TIE12NGJnEO+qQa33QfleyTH7rnHVNHL492g65Ixpe8Tsu7I 8uzCrXA+/LNXne0lz15svyOU3YeJ5YRUdgRzVaMM87mRymipi0n4MNfOZvDkjO9xSs3PIpsI2Ru f X-Gm-Gg: ASbGnct3qLLrCYSvLSJKKKBpPSdUIGUZMsRfHyNpzRQ3iEdCyA+cIU5QOpRofZCwp71 ChAb9evIkBNgtxiqjwrjikIKst3JEzUCyxLTe6GDrNG2mlS6TVj3t1Q4JtpY+vAtZDOmVvKGq5n lVE8F8KJKKEGfUkWJrGlFYvDC8q5MNVqWOFJG9G7l4UvEKuK2yRemkCnJRYgtoP+T9uXsWvB8md DnrwvDjO3GOaJZ4CwSLDCW/x3gKTwIxYhwqHi1M/TfJ2wd1h2pxBnoUPaQJ3KvN6t16nWxv0PWi +KwK11Uuzn3F X-Google-Smtp-Source: AGHT+IFwCX4IrIIsqj1WhSsNw2kleHCCfGrD04i/x7JIx9hsBZzqOh2BeQY7tn2DOd0tTFFYGSefyw== X-Received: by 2002:a5d:47c2:0:b0:38a:888c:7df0 with SMTP id ffacd0b85a97d-38bf56494e9mr22348580f8f.1.1737588164849; Wed, 22 Jan 2025 15:22:44 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V2 08/20] qemu: Add helper function for creating save image fd Date: Wed, 22 Jan 2025 16:16:42 -0700 Message-ID: <20250122232228.19306-9-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250122232228.19306-1-jfehlig@suse.com> References: <20250122232228.19306-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: FLZZWOYJBZSCDBR3EA3MLLCYLQWCZBM5 X-Message-ID-Hash: FLZZWOYJBZSCDBR3EA3MLLCYLQWCZBM5 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: 1737588390944019000 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 ff5b9e72eb..65464fd1e1 100644 --- a/src/qemu/qemu_saveimage.c +++ b/src/qemu/qemu_saveimage.c @@ -361,6 +361,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 */ @@ -377,33 +421,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 Tue Sep 9 19:05:56 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=1737588409; cv=none; d=zohomail.com; s=zohoarc; b=g3brYUaHs+Bb/YF7O+M6/Py7n/5pL++cwLowqV82swNIc3JjjoonnG2PbrQtcC2wvLk3P4gHs69RyZRE85c7WRaKDPDzxffxK27WKkIXDaTgSeFoldupVyI7uqJerdPsOLtsFJFExnWgeigzVjDg6DH7VV1ZRzdaMWRT7kjLhM8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1737588409; 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=phZ4KwogEJ2rOSqF5rlja0v58p2oy66vVHamn9rCNXk=; b=IcAwFNfxSElqG5WBD3oWFUvM3DvubTQ7gPZZzEjOn9v0mzppnngkAfNRNcLzE9kTlpOh0fkxaeTmZ9aOUO9mDfd0JElH0aNjW31TT/hVYEl2usGvA09Rb1wp+MxmpK5LVf4ktruX3U5HhRRFFdDqV2yrfJDXvAKaHcKc0XaPHS0= 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 1737588409821137.9538176446598; Wed, 22 Jan 2025 15:26:49 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 2401B1406; Wed, 22 Jan 2025 18:26:49 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 242A0139D; Wed, 22 Jan 2025 18:23:14 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 385901369; Wed, 22 Jan 2025 18:23:10 -0500 (EST) Received: from mail-ej1-f41.google.com (mail-ej1-f41.google.com [209.85.218.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 ED1621302 for ; Wed, 22 Jan 2025 18:22:47 -0500 (EST) Received: by mail-ej1-f41.google.com with SMTP id a640c23a62f3a-aaf900cc7fbso53174766b.3 for ; Wed, 22 Jan 2025 15:22:47 -0800 (PST) Received: from localhost (75-169-8-111.slkc.qwest.net. [75.169.8.111]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-72dab9b9ae0sm12022120b3a.93.2025.01.22.15.22.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Jan 2025 15:22:46 -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_H3, RCVD_IN_MSPIKE_WL,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=1737588167; x=1738192967; 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=yvOKPNQhN2kVMaX+QVqw80i2Nk7mjND2MHwNf41p1xQ=; b=OZNGIib6KjO9beae0qq602N4ccHUf/U4BiYuhKWwSlUBQsnmaVDLBPhwGyZ/vNg/1d ClLimNJTuL8CA7Wbo6eAb3195kyvo6N7UF215I5umvx1ytRIFKJ4Gd2Y4y6PV8cM+CAf YDT6qbBlYwBx/ZgvZpyXOD12j8XP35936GnYTIg/6FfJVy+6UQV92cyXemfXs3uwFGnj k5xLNfAwM3c5SOJ/BKpjWUDcDbiA7Kaygf3coRO2oSFzI5IUXsZRt/9hSHUiwrF+d0Qu yZEjtIkWoQiVJsMFheLdMwUqSpfuhMuh3oYPg0DNXVhHvmAcA30xwY9tRD5l0JC16Fo6 yxbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737588167; x=1738192967; 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=yvOKPNQhN2kVMaX+QVqw80i2Nk7mjND2MHwNf41p1xQ=; b=gieqbbQ5f3BR2gGjGEUmLJ4MeC3Pw84K3fudDy5xZEL+d6/lz47fdWvdqtZxs8C45a Frf4td+o2mD2wdbm+98bw9QIcqk3fT67XaVN0PFeC40RvhS9ZpZxZBPbrNWkivsqDI++ bw3J2K/6tV2SJDjo2B8u6V4eEVl+uL5nkNCNHzhWuOcjiu3Vn6i/lfpvGSm3TnKtwESV cwMnwfsYv2oqv50K30VKEP7SaJl3Dkgz+L3gbfjwr50axzakR6Ht3M9i/pNTLNe82geC NtaaXImYwi+nHo3p98dFbM/u1V388YR+xHI46ro2ZziaarypgsjdjwGcJ98Bd3H3tcz6 a6zA== X-Gm-Message-State: AOJu0YwNuYJj5QtqRGuIZM9LGfdzOHjbvE8SIAisKLyGAWOWWkMefoAc Clto2uPOuv1+saLybrabCMa87LOIPocnkPEzKGB5rQaSK321mesQ1bPJSlniVe3gWQ/VTWqnaqV 8 X-Gm-Gg: ASbGnctSz3+06IviJNMyihi2p2EYBzFskmiBhyjruKJmtlYfyDYrShvvu5f6AIKuJsu dkGe/k3oNN7ho75f6z1BZf65cVClcJJR5KRjE8xTQZ4z6IME/KL9xiHPPdstWb7u/TqpeJhcsi2 Ss67cm7m7g2mq4QFqA2qq9LpSOT/k+5gvaqi81zhQTmukzIuPChi24Hj/EibP1xafbpylXSPMm6 3RzphcuRr8u5nU74msOUUQubgGtysLdJibwmOAy2colmn9DidpQx0V5In6spuL6C+C6uDHdqQ45 Sj7xHJDYWvSB X-Google-Smtp-Source: AGHT+IHXHq9/bgZUr3wWvBcU5EGQPtCK9sDumh+YHejkMIUPfIowb5sLaoh82QjKwS38mulNpNZUSQ== X-Received: by 2002:a17:906:5002:b0:ab6:4faa:bc83 with SMTP id a640c23a62f3a-ab64faabcf8mr426384466b.14.1737588166643; Wed, 22 Jan 2025 15:22:46 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V2 09/20] qemu: Move declaration of virQEMUSaveFormat to header file Date: Wed, 22 Jan 2025 16:16:43 -0700 Message-ID: <20250122232228.19306-10-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250122232228.19306-1-jfehlig@suse.com> References: <20250122232228.19306-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: MHKYQH5BPK72J3KQCXIV5C7X33HUEYMC X-Message-ID-Hash: MHKYQH5BPK72J3KQCXIV5C7X33HUEYMC 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: 1737588411076019000 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 65464fd1e1..e655be60d2 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 0e58dd14b6..fc875f9a0c 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 Tue Sep 9 19:05:56 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=1737588525; cv=none; d=zohomail.com; s=zohoarc; b=XnaGtIUygiAghqgf9lou45OYR6To7gLXYQqANckqbhR1Io1u4SN/yllo2sN5/+TRLQwZGIJIiSlAT6QQqZpaiakd33XBkO0mrVcPjhNEr8Frfafo5Nx+9RHVhhDZeJVW8lCExBYJWUDaup8f4EazQ0CR2cLKUKOU5K+ShF1Fq6E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1737588525; 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=sXgp+JJWOuLVuFZg80+9+rAq/0rsdPfTn7KB9zO3vvw=; b=IHMBIBoJMPg8bySTyj8xQS74LuYDvo44J0a5oUk+81p1jVkN6ZjRZzUFIuMCHxoesME/x1nkcoPdOGYIpOTOgACqIZMnFGrq3hftC+cBANORctEQpgpgTBwB/iIvKYmS/hQZLb0o5O58y9KB5h/XkkXPa/qP7NCsgHsxonsiFw8= 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 1737588525923522.2375315203411; Wed, 22 Jan 2025 15:28:45 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 4F2CA138E; Wed, 22 Jan 2025 18:28:45 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 31CB313E8; Wed, 22 Jan 2025 18:23:22 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id ABBAA12F6; Wed, 22 Jan 2025 18:23:13 -0500 (EST) Received: from mail-ej1-f44.google.com (mail-ej1-f44.google.com [209.85.218.44]) (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 D12F012A7 for ; Wed, 22 Jan 2025 18:22:50 -0500 (EST) Received: by mail-ej1-f44.google.com with SMTP id a640c23a62f3a-aa67ac42819so54001366b.0 for ; Wed, 22 Jan 2025 15:22:50 -0800 (PST) Received: from localhost (75-169-8-111.slkc.qwest.net. [75.169.8.111]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21c2d4028d6sm100391175ad.226.2025.01.22.15.22.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Jan 2025 15:22:48 -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_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=1737588169; x=1738192969; 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=HedLXHyD+GeGvI6GdlWtOmsXOKcSbC0IGpcrF9KOKk0=; b=XmY0ZA4oP6jcOWSp4CdVHhWO5s3gAbTkaqtt7//27t6NG9sxIQLPjXiG8+nh/LD5CK Ue+GcCSkXj3bf3ash6yvbKX90ByGywRf00A+RLFP1okwjZftD+WoeGWNtAgQNwOQgKkV 5qivFa8XMJVTSDP23cVMipLTucBg7HxEaDoZb/ExWbWnHAhQFb4i7K/0ngjR2WPyQqqX JgjZfH12w3+0nqs3yJnGhnDKKi1FclWaqaDrUlZNuNMlwjbwfdEQKg7pT1sposoUq7k8 eFj6ZzYWnv4t0S9vGN3eaiWyJGvJsv5sMhrJW7nEdPYnuV+qe+9XkDMRMxC/5xU6VrMA Pq4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737588169; x=1738192969; 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=HedLXHyD+GeGvI6GdlWtOmsXOKcSbC0IGpcrF9KOKk0=; b=NCd1281i2SpweM2U4B4mU4m+lZTXSolPHaOUafGf5wydJD5T71PW1gdNUDnfljAeiN h0/RxEQGfDlAzm61MiZU4C8kO9gFvtY/uuyANTit982DYFe/dDgLqWeacGIwHh6O85yk jZNT90eHTwjytHVzo2g6SsKOC1soS25N9NYZgv00oNX/JQjRWvw27adaUhdwNCNgsScz I86ALyLUqtI9sHH1nmvyRYSni4W2TSQEB/DDDF8YK00ZNhLYyy0brQd0BavsOwMLbyFQ jiziYl3SuqqXEVX3FQJ99cHci4bYBGyrzUR0wbvVZSaFuvmfxepd9CI8+qk2o8pnETyG gZHQ== X-Gm-Message-State: AOJu0YwNEFGnmtQAktprxUE2j/+cSAXAyGQNiyz42TVhCfw4+v2zm9pn McaHnyur8/DP4ojBWQ140pPiMJaaOSGQnrFPxBa2zJkvgOF9TCn/wfJnFfjVq3+mLYBofXpGkoB v X-Gm-Gg: ASbGncuoFyryJOycWCo4ixtu8TinDBkFR90DYmZ0HZOAuOVziA0b9T3J1sdP/bPO2et 8A25ysRAte13JMVlpibf+vMpQ8gdt3tbVXRDKnVkYBBRlTseppcY6ZhBYe3fbWnkwkd7GEaUzOE MeGn0yEwb75zUTXXqwgHmDZWiCFH3VEVsRqBkXr60u1d+FFko4ZL8YAdm7lPcv2e9XdUShAVXpi pFt1Se1MrcUl+ykrSjmlcdO8rcFj3+DROKQtZXkR1v5yN9ctUGzux9t5sWJDhQcMSu4k3cABpdX 5opb4gG4xIb4 X-Google-Smtp-Source: AGHT+IGGTq3AUYjHlPz+8SMjvENMxA6qvtrLE51pl15DX/Y8TWugE1x1wIhC19caipITgyZmUGqRAQ== X-Received: by 2002:a17:907:9721:b0:a9e:d4a9:2c28 with SMTP id a640c23a62f3a-ab38b41f651mr2185335366b.53.1737588168672; Wed, 22 Jan 2025 15:22:48 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V2 10/20] qemu: Add support for mapped-ram on save Date: Wed, 22 Jan 2025 16:16:44 -0700 Message-ID: <20250122232228.19306-11-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250122232228.19306-1-jfehlig@suse.com> References: <20250122232228.19306-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: R2OV7WCYHNXUSIUVNCA4LW6B4RRDMOIW X-Message-ID-Hash: R2OV7WCYHNXUSIUVNCA4LW6B4RRDMOIW 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: 1737588527785019000 Content-Type: text/plain; charset="utf-8" Introduce support for QEMU's new mapped-ram stream format [1]. mapped-ram is enabled by default if the underlying QEMU advertises the mapped-ram migration capability. It can be disabled by changing the 'save_image_version' setting in qemu.conf to version '2'. 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. Another caveat of mapped-ram is the requirement for a seekable file descriptor, which currently makes it incompatible with libvirt's support for save image compression. 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 | 139 ++++++++++++++++++++++++++------------ src/qemu/qemu_migration.h | 4 +- src/qemu/qemu_monitor.c | 37 ++++++++++ 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, 193 insertions(+), 62 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index d2eddbd9ae..716eddba09 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 d46a6e2e2a..6a378128d1 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -7065,46 +7065,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; @@ -7121,7 +7092,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); @@ -7137,12 +7108,99 @@ 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 +qemuMigrationSrcToMappedFile(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 qemuMigrationSrcToMappedFile(driver, vm, fd, flags, asyncJo= b); + } else { + rc =3D qemuMigrationSrcToLegacyFile(driver, vm, *fd, compressor, a= syncJob); + } + if (rc < 0) goto cleanup; =20 @@ -7178,13 +7236,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 4b7ef9688a..627d0cb3fb 100644 --- a/src/qemu/qemu_migration.h +++ b/src/qemu/qemu_migration.h @@ -237,8 +237,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 ec2f166785..d88e1b1ecd 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -2230,6 +2230,43 @@ 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; + unsigned int setId; + 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("migrate", priv); + qemuFDPassAddFD(fdPassMigrate, fd, "-fd"); + qemuFDPassTransferMonitor(fdPassMigrate, mon); + + if (qemuFDPassGetId(fdPassMigrate, &setId) < 0) + return -1; + + uri =3D g_strdup_printf("file:/dev/fdset/%u,offset=3D%#lx", setId, off= set); + 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 c74892c4dc..7f54203fe3 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -855,6 +855,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 e655be60d2..245bbf9dfc 100644 --- a/src/qemu/qemu_saveimage.c +++ b/src/qemu/qemu_saveimage.c @@ -346,6 +346,7 @@ qemuSaveImageCreateFd(virQEMUDriver *driver, virDomainObj *vm, const char *path, virFileWrapperFd *wrapperFd, + bool sparse, bool *needUnlink, unsigned int flags) { @@ -355,7 +356,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) { @@ -375,7 +376,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; @@ -394,6 +395,7 @@ qemuSaveImageCreate(virQEMUDriver *driver, const char *path, virQEMUSaveData *data, virCommand *compressor, + qemuMigrationParams *saveParams, unsigned int flags, virDomainAsyncJob asyncJob) { @@ -402,9 +404,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; @@ -413,7 +416,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. */ @@ -421,14 +424,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) @@ -485,8 +492,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 fc875f9a0c..481e280d75 100644 --- a/src/qemu/qemu_saveimage.h +++ b/src/qemu/qemu_saveimage.h @@ -129,6 +129,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 80cd54bf33..07883d67fa 100644 --- a/src/qemu/qemu_snapshot.c +++ b/src/qemu/qemu_snapshot.c @@ -1631,6 +1631,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; @@ -1648,6 +1650,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)) || @@ -1662,8 +1671,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 Tue Sep 9 19:05:56 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=1737588443; cv=none; d=zohomail.com; s=zohoarc; b=cLjpvQpY7agKKb0GAHTTChLtu5e8+erbhQcg1CxalFHIqMKys9UJtQRcHMMQ4I1/89OrjL/uck7ZY3+Wia0VNL/9vKjmDG4Tidd1Geh8cWppCj2nAFEyafnzTRMgIBx0olP6Nq5do23qhh4jHzy5zqhBsTQnt51feSAKxjINY1g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1737588443; 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=STEuJCykOknGYMjxyW6r0Am+t0MYQKSe1OT57qBRvrE=; b=jvwUsztDgVErJ1kQr7lcJUJgtV/5Xz5POkQOnIZOEqLgxlIjaNa508jwiYaMwv9wIzhDCo9b8wP8KhNaFQe0r3ayyihrF7GC+q7OXpVt2Gh3h+d7rF180JsGLsf0v9XgkuvVT6KKQ1FJhZXmlOvmnw0uu9Y3JyJ0fOFS3aIZpCg= 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 1737588443049678.5240419675924; Wed, 22 Jan 2025 15:27:23 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 925AC12FB; Wed, 22 Jan 2025 18:27:22 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 2398A1369; Wed, 22 Jan 2025 18:23:18 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 46F3812F6; Wed, 22 Jan 2025 18:23:13 -0500 (EST) Received: from mail-ej1-f52.google.com (mail-ej1-f52.google.com [209.85.218.52]) (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 C88911367 for ; Wed, 22 Jan 2025 18:22:51 -0500 (EST) Received: by mail-ej1-f52.google.com with SMTP id a640c23a62f3a-ab2c9b8aecaso59345966b.0 for ; Wed, 22 Jan 2025 15:22:51 -0800 (PST) Received: from localhost (75-169-8-111.slkc.qwest.net. [75.169.8.111]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-72dab9c8e65sm12052843b3a.103.2025.01.22.15.22.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Jan 2025 15:22: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_H3, RCVD_IN_MSPIKE_WL,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=1737588171; x=1738192971; 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=oy17uMQIxsFLtZWIXTWOn55RygJj9fg0qPO9gzXI0nk=; b=Ge/ZlXeCRa28cXp5jFw+taFWv/wYJ8yYNWaMOfHKQGD3ujMyEWdmA+20XsW6Qqhbn8 zBMWJ/3MlGZfT/+QwkVxhNI/oW02CQalRKMarT6V2QgTUWXaisdyth5mhOyqFj9mmWHA Z/+5Qp7dX/FWrbjlNeIX2Xs4cq8AwsJ1YHT5JfYS248KXpUzK4J7yrnL4Uto4lFMcx50 eXnH21EPx6asUePzoLVpBG70f6U0OHpNpEoEUFxSKEvGaE6WCo4MiI24R/q57PBjMNw/ VEcvIn7G957jxfBFTZ1zXnzg/fWEK1wTFPwK06LDlnAYVzDpAz1wgt39dxE7aLgt+92V xmXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737588171; x=1738192971; 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=oy17uMQIxsFLtZWIXTWOn55RygJj9fg0qPO9gzXI0nk=; b=os5Th570r0bjd4pIPBEqEzDLC8Qnv+jquTinjgNNg3Vg9FlJKB0n1+BUxzcZGAUbcl hfJUTpnAszSPLAlTOu4w/oMSzM2gbgOAuD9SpFMRb2U1z7ql6LaJMZR3KNgzKaL7PlqF 9FnjvFv9hLWi2ZwMNflEGl/ESd5sucqRd1ebl2Iyb1sPd+TwoduLcpHwjOsrefaYsjYm F/vVnvTHdu5xuwS4lOrnr7ABIpnefe7HP3lFY7heEwwVEvf0seyod8043MTZmw3mDSR2 OMFB3xkU/WDE13S9ZLsL49pSt40tnUn6nnoYywyq2gPeUZtNDk7aP4t0bSrHyTFgh3KU ohwQ== X-Gm-Message-State: AOJu0YxihwDrQgw2qsnOzLFCokNh5+Zr4BfzDp2+LQncqcA14s2dsAA+ cAN23CRMtWPyUC8UszYimMkRye0EVW0OQ1UjKgY6JKFbS2dDMUg2waDoPuc8YENidrP6gGxapA2 H X-Gm-Gg: ASbGncuysSEVcBzgR7hFFm8iBCFtq+q94EASUiBUI/NRoJ0K9zp2DTN+VPvM5ZNzYjl lSwrUa+K0mbqEaABvYOUiFT/DLwI2c9S3iOSJpnnK6ggKt2pBJ7ygCt5qPXVyrl91L1LFFG7TAu WK0OsdTwjrsZ2U2Pg1KpO7IwzG1cLeGySnoQN4wS59ggIrQEBXFz1Y+6vXnppDpCYXVhcL/DyTw 9D+w6fS6enL6rJgIOp/TLBouKOA64XTYgGRP9oyc0Fa0F9LgMMTrw3YLcM2+BJyu9lRM/9MKaKb MnvPxEbaVAya X-Google-Smtp-Source: AGHT+IHR9qQvdtKBtPLoZkVfhJIOS2Bp6UOXT3Z6Foutcd5QXFvq4WH6aPALFhfcp7FGtR3iCDJDYw== X-Received: by 2002:a17:907:7f03:b0:ab2:d96d:6364 with SMTP id a640c23a62f3a-ab38b10ade0mr2009287166b.18.1737588170531; Wed, 22 Jan 2025 15:22:50 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V2 11/20] qemu: Decompose qemuSaveImageOpen Date: Wed, 22 Jan 2025 16:16:45 -0700 Message-ID: <20250122232228.19306-12-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250122232228.19306-1-jfehlig@suse.com> References: <20250122232228.19306-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: EUZYALVCWLOAQSDUAVSW7S3OQODE43CL X-Message-ID-Hash: EUZYALVCWLOAQSDUAVSW7S3OQODE43CL 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: 1737588445398019000 Content-Type: text/plain; charset="utf-8" Split the reading of libvirt's save image metadata from the opening of the fd that will be passed to QEMU. This provides flexibility for an upcoming patch adding mapped-ram support for restore. Signed-off-by: Jim Fehlig --- src/qemu/qemu_driver.c | 37 ++++++++-------- src/qemu/qemu_saveimage.c | 89 ++++++++++++++++++++++++--------------- src/qemu/qemu_saveimage.h | 16 ++++--- src/qemu/qemu_snapshot.c | 9 ++-- 4 files changed, 89 insertions(+), 62 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 716eddba09..5afc2ea846 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -5792,9 +5792,12 @@ qemuDomainRestoreInternal(virConnectPtr conn, if (flags & VIR_DOMAIN_SAVE_RESET_NVRAM) reset_nvram =3D true; =20 - fd =3D qemuSaveImageOpen(driver, NULL, path, &def, &data, + if (qemuSaveImageGetMetadata(driver, NULL, path, &def, &data, false) <= 0) + goto cleanup; + + fd =3D qemuSaveImageOpen(driver, path, (flags & VIR_DOMAIN_SAVE_BYPASS_CACHE) !=3D 0, - &wrapperFd, false, false); + &wrapperFd, false); if (fd < 0) goto cleanup; =20 @@ -5923,15 +5926,11 @@ qemuDomainSaveImageGetXMLDesc(virConnectPtr conn, c= onst char *path, virQEMUDriver *driver =3D conn->privateData; char *ret =3D NULL; g_autoptr(virDomainDef) def =3D NULL; - int fd =3D -1; virQEMUSaveData *data =3D NULL; =20 virCheckFlags(VIR_DOMAIN_SAVE_IMAGE_XML_SECURE, NULL); =20 - fd =3D qemuSaveImageOpen(driver, NULL, path, &def, &data, - false, NULL, false, false); - - if (fd < 0) + if (qemuSaveImageGetMetadata(driver, NULL, path, &def, &data, false) <= 0) goto cleanup; =20 if (virDomainSaveImageGetXMLDescEnsureACL(conn, def) < 0) @@ -5941,7 +5940,6 @@ qemuDomainSaveImageGetXMLDesc(virConnectPtr conn, con= st char *path, =20 cleanup: virQEMUSaveDataFree(data); - VIR_FORCE_CLOSE(fd); return ret; } =20 @@ -5965,8 +5963,10 @@ qemuDomainSaveImageDefineXML(virConnectPtr conn, con= st char *path, else if (flags & VIR_DOMAIN_SAVE_PAUSED) state =3D 0; =20 - fd =3D qemuSaveImageOpen(driver, NULL, path, &def, &data, - false, NULL, true, false); + if (qemuSaveImageGetMetadata(driver, NULL, path, &def, &data, false) <= 0) + goto cleanup; + + fd =3D qemuSaveImageOpen(driver, path, 0, NULL, false); =20 if (fd < 0) goto cleanup; @@ -6024,7 +6024,6 @@ qemuDomainManagedSaveGetXMLDesc(virDomainPtr dom, uns= igned int flags) g_autofree char *path =3D NULL; char *ret =3D NULL; g_autoptr(virDomainDef) def =3D NULL; - int fd =3D -1; virQEMUSaveData *data =3D NULL; qemuDomainObjPrivate *priv; =20 @@ -6046,15 +6045,14 @@ qemuDomainManagedSaveGetXMLDesc(virDomainPtr dom, u= nsigned int flags) goto cleanup; } =20 - if ((fd =3D qemuSaveImageOpen(driver, priv->qemuCaps, path, &def, &dat= a, - false, NULL, false, false)) < 0) + if (qemuSaveImageGetMetadata(driver, priv->qemuCaps, path, + &def, &data, false) < 0) goto cleanup; =20 ret =3D qemuDomainDefFormatXML(driver, priv->qemuCaps, def, flags); =20 cleanup: virQEMUSaveDataFree(data); - VIR_FORCE_CLOSE(fd); virDomainObjEndAPI(&vm); return ret; } @@ -6110,14 +6108,17 @@ qemuDomainObjRestore(virConnectPtr conn, virQEMUSaveData *data =3D NULL; virFileWrapperFd *wrapperFd =3D NULL; =20 - fd =3D qemuSaveImageOpen(driver, NULL, path, &def, &data, - bypass_cache, &wrapperFd, false, true); - if (fd < 0) { - if (fd =3D=3D -3) + ret =3D qemuSaveImageGetMetadata(driver, NULL, path, &def, &data, true= ); + if (ret < 0) { + if (ret =3D=3D -3) ret =3D 1; goto cleanup; } =20 + fd =3D qemuSaveImageOpen(driver, path, bypass_cache, &wrapperFd, false= ); + if (fd < 0) + goto cleanup; + if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) { int hookret; =20 diff --git a/src/qemu/qemu_saveimage.c b/src/qemu/qemu_saveimage.c index 245bbf9dfc..3a71c23c01 100644 --- a/src/qemu/qemu_saveimage.c +++ b/src/qemu/qemu_saveimage.c @@ -536,58 +536,35 @@ qemuSaveImageGetCompressionProgram(const char *imageF= ormat, =20 =20 /** - * qemuSaveImageOpen: + * qemuSaveImageGetMetadata: * @driver: qemu driver data * @qemuCaps: pointer to qemuCaps if the domain is running or NULL * @path: path of the save image * @ret_def: returns domain definition created from the XML stored in the = image * @ret_data: returns structure filled with data from the image header - * @bypass_cache: bypass cache when opening the file - * @wrapperFd: returns the file wrapper structure - * @open_write: open the file for writing (for updates) * @unlink_corrupt: remove the image file if it is corrupted * - * Returns the opened fd of the save image file and fills the appropriate = fields - * on success. On error returns -1 on most failures, -3 if corrupt image w= as - * unlinked (no error raised). + * Open the save image file, read libvirt's save image metadata, and popul= ate + * the @ret_def and @ret_data structures. Returns 0 on success and -1 on m= ost + * failures. Returns -3 if corrupt image was unlinked (no error raised). */ int -qemuSaveImageOpen(virQEMUDriver *driver, - virQEMUCaps *qemuCaps, - const char *path, - virDomainDef **ret_def, - virQEMUSaveData **ret_data, - bool bypass_cache, - virFileWrapperFd **wrapperFd, - bool open_write, - bool unlink_corrupt) +qemuSaveImageGetMetadata(virQEMUDriver *driver, + virQEMUCaps *qemuCaps, + const char *path, + virDomainDef **ret_def, + virQEMUSaveData **ret_data, + bool unlink_corrupt) { g_autoptr(virQEMUDriverConfig) cfg =3D virQEMUDriverGetConfig(driver); VIR_AUTOCLOSE fd =3D -1; - int ret =3D -1; g_autoptr(virQEMUSaveData) data =3D NULL; virQEMUSaveHeader *header; g_autoptr(virDomainDef) def =3D NULL; - int oflags =3D open_write ? O_RDWR : O_RDONLY; size_t xml_len; size_t cookie_len; =20 - if (bypass_cache) { - int directFlag =3D virFileDirectFdFlag(); - if (directFlag < 0) { - virReportError(VIR_ERR_OPERATION_FAILED, "%s", - _("bypass cache unsupported by this system")); - return -1; - } - oflags |=3D directFlag; - } - - if ((fd =3D qemuDomainOpenFile(cfg, NULL, path, oflags, NULL)) < 0) - return -1; - - if (bypass_cache && - !(*wrapperFd =3D virFileWrapperFdNew(&fd, path, - VIR_FILE_WRAPPER_BYPASS_CACHE))) + if ((fd =3D qemuDomainOpenFile(cfg, NULL, path, O_RDONLY, NULL)) < 0) return -1; =20 data =3D g_new0(virQEMUSaveData, 1); @@ -685,6 +662,50 @@ qemuSaveImageOpen(virQEMUDriver *driver, *ret_def =3D g_steal_pointer(&def); *ret_data =3D g_steal_pointer(&data); =20 + return 0; +} + + +/** + * qemuSaveImageOpen: + * @driver: qemu driver data + * @path: path of the save image + * @bypass_cache: bypass cache when opening the file + * @wrapperFd: returns the file wrapper structure + * @open_write: open the file for writing (for updates) + * + * Returns the opened fd of the save image file on success, -1 on failure. + */ +int +qemuSaveImageOpen(virQEMUDriver *driver, + const char *path, + bool bypass_cache, + virFileWrapperFd **wrapperFd, + bool open_write) +{ + g_autoptr(virQEMUDriverConfig) cfg =3D virQEMUDriverGetConfig(driver); + VIR_AUTOCLOSE fd =3D -1; + int ret =3D -1; + int oflags =3D open_write ? O_RDWR : O_RDONLY; + + if (bypass_cache) { + int directFlag =3D virFileDirectFdFlag(); + if (directFlag < 0) { + virReportError(VIR_ERR_OPERATION_FAILED, "%s", + _("bypass cache unsupported by this system")); + return -1; + } + oflags |=3D directFlag; + } + + if ((fd =3D qemuDomainOpenFile(cfg, NULL, path, oflags, NULL)) < 0) + return -1; + + if (bypass_cache && + !(*wrapperFd =3D virFileWrapperFdNew(&fd, path, + VIR_FILE_WRAPPER_BYPASS_CACHE))) + return -1; + ret =3D fd; fd =3D -1; =20 diff --git a/src/qemu/qemu_saveimage.h b/src/qemu/qemu_saveimage.h index 481e280d75..7340925274 100644 --- a/src/qemu/qemu_saveimage.h +++ b/src/qemu/qemu_saveimage.h @@ -89,17 +89,21 @@ qemuSaveImageStartVM(virConnectPtr conn, virDomainAsyncJob asyncJob) ATTRIBUTE_NONNULL(4) ATTRIBUTE_NONNULL(5) ATTRIBUTE_NONNULL(6); =20 +int +qemuSaveImageGetMetadata(virQEMUDriver *driver, + virQEMUCaps *qemuCaps, + const char *path, + virDomainDef **ret_def, + virQEMUSaveData **ret_data, + bool unlink_corrupt) + ATTRIBUTE_NONNULL(4) ATTRIBUTE_NONNULL(5); + int qemuSaveImageOpen(virQEMUDriver *driver, - virQEMUCaps *qemuCaps, const char *path, - virDomainDef **ret_def, - virQEMUSaveData **ret_data, bool bypass_cache, virFileWrapperFd **wrapperFd, - bool open_write, - bool unlink_corrupt) - ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4); + bool open_write); =20 int qemuSaveImageGetCompressionProgram(const char *imageFormat, diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c index 07883d67fa..5991455a4e 100644 --- a/src/qemu/qemu_snapshot.c +++ b/src/qemu/qemu_snapshot.c @@ -2389,11 +2389,12 @@ qemuSnapshotRevertExternalPrepare(virDomainObj *vm, g_autoptr(virDomainDef) savedef =3D NULL; =20 memdata->path =3D snapdef->memorysnapshotfile; - memdata->fd =3D qemuSaveImageOpen(driver, NULL, memdata->path, - &savedef, &memdata->data, - false, NULL, - false, false); + if (qemuSaveImageGetMetadata(driver, NULL, memdata->path, &savedef, + &memdata->data, false) < 0) + return -1; =20 + memdata->fd =3D qemuSaveImageOpen(driver, memdata->path, + false, NULL, false); if (memdata->fd < 0) return -1; =20 --=20 2.43.0 From nobody Tue Sep 9 19:05:56 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=1737588468; cv=none; d=zohomail.com; s=zohoarc; b=e1eFTXSjMdeHTVAU4y+i/3spDHxn9/q1Mj0P52SRajhGU/AWGPEm76foXWSrKlQxJLDnRQbVnbo2is4oGv7+zna5FvtCW/tV9IuI2GjcELeKD+4lUUJdXg8ENc9Ty1/WpOhlnzWp/TikjfhJQpK4DErugO48LmI/XVZQnQPnTjo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1737588468; 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=yju653hpeT0cnuPSeACbsZ4OB6tciiWlltMlyA6al7E=; b=miqz3L9pwT7QdRSEfatpT9yN5bhFF/isHmrq866uNXTE1UPPiovkffOO8T+sxTXjS8vKkUqrOHmKJIkDsZMhN46T1luc1uQRSAGoZXARqeCLNN/fv4ooeCDjhgjv95s8dWkowKCa+jOAlA7+mKcHLJ55aYsIvl7SMwSpD3IxaII= 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 1737588468816407.59536494461736; Wed, 22 Jan 2025 15:27:48 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 57276144F; Wed, 22 Jan 2025 18:27:48 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 0CC9D13E4; Wed, 22 Jan 2025 18:23:20 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 9534612F6; Wed, 22 Jan 2025 18:23:13 -0500 (EST) Received: from mail-ej1-f45.google.com (mail-ej1-f45.google.com [209.85.218.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 A408313A0 for ; Wed, 22 Jan 2025 18:22:53 -0500 (EST) Received: by mail-ej1-f45.google.com with SMTP id a640c23a62f3a-ab651f1dd36so71788566b.0 for ; Wed, 22 Jan 2025 15:22:53 -0800 (PST) Received: from localhost (75-169-8-111.slkc.qwest.net. [75.169.8.111]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21c2ce9ed52sm101788525ad.16.2025.01.22.15.22.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Jan 2025 15:22: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_H3, RCVD_IN_MSPIKE_WL,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=1737588172; x=1738192972; 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=XUDoCQJgtwcuBdVaHL+yxqMdOLhZkjKOxumx9gvNGqI=; b=SITgNZjEKHLb3dL2AJoqeuVZiJF/eqXUFY5lNejV7l9CNh2adIhJ6V4BLO0L0IBzfX Q9M1pfEQ0aCS4w/YQXyn+lHLLK85FdhQna7PCfBu9copl15ipXZjXZb8jAZ0MOsb23hn JZFFOv7nIOTUc3ivp++bhqjkPIc1sCybDBAhPk11wdBvasDicTtNaL4D6c166ikm1y2G iv9BMw/KwJIwAnI21gMqoUAg94ii8eYFnjOK7Oud4S8w28qTmfS6PyC2jXKwnbc5+Y+n QjJUazqjeVdiHER6CrlZWe9Tp4sV4JsqVoFvu9V9O2jDmuTSciSZuv1Grmt2r8wz0tw4 jtAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737588172; x=1738192972; 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=XUDoCQJgtwcuBdVaHL+yxqMdOLhZkjKOxumx9gvNGqI=; b=PqqKqNxcL+c4IfgFkladej6nZmjxejt+bLSEw+QrRlDW1xkrP+LyrQFO5Wm+kQ6cs9 zLbovunt/a3DV1RSV+5nAApdq1PlCcYI64ZS91CNwCLUzT/HKcB3iN8MQGVOuyzN8Gbn JJOnMQ4wf3cRZmaDwDentuJZVMUIL1lvPrwM24TxFKm5adJh9d9b91+y03kVCuW8OEoH hCLqJ1LHR1QnY+IsM/OV0NUsvrj1qdY4Q8xrTS5YQnsJf58t9ZIRqSNghylutNlwL4hI 1RxAQ+5KPW8rwwmx06NdlMbGwe1smTwTQL//YjwRkpZkfFXB/0l0/FRd5ryEYUsMnKYz RIfg== X-Gm-Message-State: AOJu0YwogXqzyggDXxcVhFIk7jzMFwy9jaEdVYB6spXnNA7x/A2p4lnr 28sO/ijilJZhUSeWV2MN5wsKnMnC8oxQOErWpp4DPZJ/6QfAPSBeohtw8+1cOVkSJyJPbdCYdDQ p X-Gm-Gg: ASbGncv1bZA5rF+Hl0+gKUehPNMZmEdZIm4wIMpCQTzie+BHgvsGiOnOG/jUYWTTVed SzCdmQoqktLfsdVBRBu5t5YJ/oEX652ObH26YX0GmItGJsu0M+g1Pte9JdiZUuefHYEP7JFE9Lv 6XgdISfGWpL1Fwh7JxpchCKom/WQA5jcYnc4krSeporSBj0IMSvKztAAJF2QsrfdHE0DMu8eChL TNCtPbDR3bshjfEBabqeJlMDWJmSY2saAvM9orQNWybTVoGKGRfRmpczxB0WDu/FS23pdbDi9N3 hThCrCTTZvaC X-Google-Smtp-Source: AGHT+IHuXoE4IHgS5iB06IzzJl5YxaEDuwBbZpWmyZgM8fAkFr/ZYTz05jot8S1cbg3Hx+PyoT5ESA== X-Received: by 2002:a17:907:7e95:b0:aa6:7354:e926 with SMTP id a640c23a62f3a-ab38b42b49cmr2065663966b.36.1737588172490; Wed, 22 Jan 2025 15:22:52 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V2 12/20] qemu: Move creation of qemuProcessIncomingDef struct Date: Wed, 22 Jan 2025 16:16:46 -0700 Message-ID: <20250122232228.19306-13-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250122232228.19306-1-jfehlig@suse.com> References: <20250122232228.19306-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: DKYO6XNASV3LSOTA35LRP6BOZLT3NFTS X-Message-ID-Hash: DKYO6XNASV3LSOTA35LRP6BOZLT3NFTS 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: 1737588469427019000 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 | 44 ++++++++++++++++++++--------------------- src/qemu/qemu_process.h | 2 +- 2 files changed, 22 insertions(+), 24 deletions(-) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 6db48b0e7b..1f00c0016d 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -8295,7 +8295,7 @@ qemuProcessStart(virConnectPtr conn, virDomainObj *vm, virCPUDef *updatedCPU, virDomainAsyncJob asyncJob, - const char *migrateFrom, + qemuProcessIncomingDef *incoming, int migrateFd, const char *migratePath, virDomainMomentObj *snapshot, @@ -8303,7 +8303,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; @@ -8311,11 +8310,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 | @@ -8324,20 +8323,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 @@ -8390,14 +8382,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); @@ -8451,20 +8442,24 @@ 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; + + incoming =3D qemuProcessIncomingDefNew(priv->qemuCaps, NULL, "stdio", + *fd, path); + if (!incoming) + return -1; =20 if (data) { if (virSaveCookieParseString(data->cookie, (virObject **)&cookie, virDomainXMLOptionGetSaveCookie(drive= r->xmlopt)) < 0) - return -1; + goto cleanup; =20 if (qemuSaveImageDecompressionStart(data, fd, &intermediatefd, &errbuf, &cmd) < 0) { - return -1; + goto cleanup; } - - migrateFrom =3D "stdio"; } =20 /* No cookie means libvirt which saved the domain was too old to mess = up @@ -8477,7 +8472,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; @@ -8489,14 +8484,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 12781673c5..1dd6ae23c8 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 Tue Sep 9 19:05:56 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=1737588549; cv=none; d=zohomail.com; s=zohoarc; b=CcWvkbagJYxJ+Wtjk72SSMJj2GuVAJsaqeT2ZPInfWzRtmqeuGi0b2n3b29A7Zw3n7oLXz0m17x/ZlyOOQGRkGHDPonBTWUR28+xq0ZgN0PS2GvksXcEitUWE3j8g9gmBC0j9t9aov9gLCLxM3hLVcC2atWtl9yGCPIaTurpb7s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1737588549; 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=vtrLLB51zfZHK8QasOHNCaDX43Qci//2SJr3vluFdrE=; b=HXg/p+q9+QjC4/FZpq42LzTf40QCZFhhJQG9bSRoLqU/uI3rt2nSjbhV7A4SMT7ULdnXFkC0jeD5ijte8vQAnwkGk4R2iTeDk8+NFTgrWYH6nX6j3sb9HLJLhJ/qUaMVdZk6ZaQP82V3jgB1CqXuLpYXogMec/zg/rILserlKPk= 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 1737588549971673.5121209302853; Wed, 22 Jan 2025 15:29:09 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 5CB0813CB; Wed, 22 Jan 2025 18:29:09 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id F2BCB12A9; Wed, 22 Jan 2025 18:23:23 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id D0D8712A7; Wed, 22 Jan 2025 18:23:13 -0500 (EST) Received: from mail-ed1-f44.google.com (mail-ed1-f44.google.com [209.85.208.44]) (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 6E0141376 for ; Wed, 22 Jan 2025 18:22:55 -0500 (EST) Received: by mail-ed1-f44.google.com with SMTP id 4fb4d7f45d1cf-5d3f57582a2so3067203a12.1 for ; Wed, 22 Jan 2025 15:22:55 -0800 (PST) Received: from localhost (75-169-8-111.slkc.qwest.net. [75.169.8.111]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-72dab812f21sm11638253b3a.43.2025.01.22.15.22.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Jan 2025 15:22:53 -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=1737588174; x=1738192974; 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=ZvgGqKBrpelOK1rsmgUvW/CJJHP/4HXwxrtFnQ0Rbsk=; b=MP8U6MUEwFUMc+4Y0wHe84UKcFDpFjnpogOWreXrnvirKT6OcYXQoauZeHoP7UHKOU e8KjjI0bXKr8l7ux0bVmz4kxQWuKp/fGym95QQjpDwMgpM1Sds6osvF4R+yAgM3QsO5I NN0t7LrXIw7LYhDuANvmz2lCIG6QuyVt5WGsx2AeJNTgV5pZxqK3qLgfgQJlU7WklppI dYNNa84MY2viF89sO6h0oVZVptJsqhlnxxxhln9L8ankYAaIZEZcxrgJExueTP0OgP7f WUnmUGby3Wk5e42rEs7Nyy5ohQcAucfqR/Fl1gUmpbjKRA888jLeinuUAw4RrE5jWt77 BSdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737588174; x=1738192974; 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=ZvgGqKBrpelOK1rsmgUvW/CJJHP/4HXwxrtFnQ0Rbsk=; b=YZ42Q3TjZWo0ip56oU3KjPOW4US4RYihNYOju81dp46/Y4IfJOkV8MvYzeM3qoKjWY xyutJPHqaoRt2HguTVqjnP2NIIfalgK4R0sOY8cOHT+vDclgihlWKvpJuGdfAT2520mV dBtENxOfOasEcDBDmKX9ERi1u3VWoNKjrCX3ams1L6ZWZVqusdU8qxEODwOT/YEaWaWA 6rxJKGMDyzvIysmUjzpmUa00pvon84JhXlHA3cstuIp6LiOWYEjQ8Yj42Um59xjHkNxB miXMkolAoCTn7wZldo0g7TmsT5ng0AXyAqGXs8/+0wJGR11cNhJOfvuKGvZuGVmqztiq WOag== X-Gm-Message-State: AOJu0Yzh6lJVt4qg3pL7Bc1shSs0/iLp+LKk6tUUJfrwiVfKJG1PhnZL DASxHJA6njDD/RH/k5Iy0JWfECdNzTh0Rp54Mptq/wPg9/XVwJXff9T+EbTHUdcMyWGNrlyR72R y X-Gm-Gg: ASbGnctrfAWD82K+cE+0Q30U1ys2/H/2oMF/Lht38gZPyKZgbo3h26GHZIMP+YobfuG hn2bNPdhTDCSCwk6aaOwbICaQfVLqdWZDEidde1RQFALZUt1clk9vTBvMyR/MXTBjAip+4AjzhP VHanG4ROFc9LX9T4/Vjhkds6EOg7jqBK+p9dHDAjR2jZyiVk0F/SP7C1rX+0GTKT85FGWAtS34T xxXr2Myy51aOVWq4qbF5O/FN9Is2ooFk8NmEjqtpooJXmbU7ksctRg8G4Xuo/hlrz4Ak5XiWf/s qe0HfPju2jQR X-Google-Smtp-Source: AGHT+IG4nlIIB/PKHnZg/IvnCKG3gu6z+F+j5YMaKr5v3OmgG6ptGwqPDl0Rb+bA0eGJoGmsUlzCIQ== X-Received: by 2002:a17:907:8687:b0:a9a:e0b8:5bac with SMTP id a640c23a62f3a-ab662a8e9d0mr96091566b.23.1737588174215; Wed, 22 Jan 2025 15:22:54 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V2 13/20] qemu: Apply migration parameters in qemuMigrationDstRun Date: Wed, 22 Jan 2025 16:16:47 -0700 Message-ID: <20250122232228.19306-14-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250122232228.19306-1-jfehlig@suse.com> References: <20250122232228.19306-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: SGY5ZRPNBHZ2QW3DR2TDWLTSUPYAL3OK X-Message-ID-Hash: SGY5ZRPNBHZ2QW3DR2TDWLTSUPYAL3OK 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: 1737588551774019000 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 6a378128d1..b2f17f8006 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2376,7 +2376,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; @@ -2384,6 +2387,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. */ @@ -3317,10 +3324,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; @@ -3352,7 +3355,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 627d0cb3fb..b1f894e501 100644 --- a/src/qemu/qemu_migration.h +++ b/src/qemu/qemu_migration.h @@ -282,7 +282,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 1f00c0016d..8d51da77c5 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -8352,7 +8352,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 Tue Sep 9 19:05:56 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=1737588629; cv=none; d=zohomail.com; s=zohoarc; b=N6UPzFnY2tERE03NRUPqnD5QlEMl+oEAQklIrvoTz0wHXd8nWfMEA5W0V1EFrqoe7BeuBTfbtjnIzhxJuaAtOWa41UfLvX2k/FuKVL+D772DIHgbRSMhwQ4xexvbhB9v5V5SMSJ89HOWr1oZkcBPQbUgLCE0Oow8mzTdABGPy9g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1737588629; 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=gtXnG3o47/6LU/MnO7psElLTMwUzslzJA6kO+lcfYKU=; b=E8S0UyPbDZuxOnShwirziXS8yqRScMm7GSgO1oM4wALR56xUSMY7vq7MeHnpEZNMHRTUe3GDRd3x8e28p8Su01GBpdqjMF0YyJ16UsRwCUeTsDX7ErV7JETeMSnTBXXxDFb9OzQpDaanFfV2ObeEcr+YUwkbQhToVZCB51Abj60= 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 1737588629804999.8164225800557; Wed, 22 Jan 2025 15:30:29 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 256BA130E; Wed, 22 Jan 2025 18:30:29 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 35DB5136B; Wed, 22 Jan 2025 18:23:30 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id C8455130E; Wed, 22 Jan 2025 18:23:18 -0500 (EST) Received: from mail-ed1-f49.google.com (mail-ed1-f49.google.com [209.85.208.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 7ACF7138D for ; Wed, 22 Jan 2025 18:22:57 -0500 (EST) Received: by mail-ed1-f49.google.com with SMTP id 4fb4d7f45d1cf-5db6890b64eso658892a12.3 for ; Wed, 22 Jan 2025 15:22:57 -0800 (PST) Received: from localhost (75-169-8-111.slkc.qwest.net. [75.169.8.111]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-aa84ed133fdsm8907885a12.17.2025.01.22.15.22.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Jan 2025 15:22:55 -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=1737588176; x=1738192976; 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=N0hKq2o9axwJDP0HYySHNYMrMhimAQE00ZVBsNhw0hs=; b=HVbWsWE+6vTjWVpB633gYFxyxsTxTh699y19LosoeerlwjnztGssas7c9TyMDeN0nm SLXK47vB9RqeJrYXKC4GzBo5V+aJjhYy5NfoHTaNNYo7jrW5Qv9Ge3GwPzdv5/726zY1 +TwLqTfSg9hUmKnXEhaYGgRCay/LlP2VkGoBT8X0VjJz51JKJMrB8rZ8HEudiRkpNGpY YOwf0VI2xY088xSRPDGTSlNEWDT+AcdeH+zEJ3yttRSNaA+X2PdSuPBShx19wGHLlq89 CbwkxxWim2tyZzG7UrhOUgujV5tcE6IMflwx54/lez0ItCsln2yVKv8BI4Avpth+OmtY OnpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737588176; x=1738192976; 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=N0hKq2o9axwJDP0HYySHNYMrMhimAQE00ZVBsNhw0hs=; b=CHWqafd9i9Z6mvQ/bJw3TbpMT1Xb7N7WHMfgyFd+y9k8ON8exSIxqeMrxH8Dvq7ZuX /v5djzIPd7a4qA9/2FTORyvFMTfvxBMD0hj7NsbZYooJYQxw5doMgXfePJvjA03uGUkq Acv78lBIRph9LeTGfHUrCwmmQNnSYSsYCuGuhWJybQxJAugSrst+ZYltc2t9FRwcUdpG hXQgH27A2ivd/y2quS/Uj4Jcb2dLPfePQF5MLvktAIGvN7ZaaZj3tHTUGSE4wuTOHpCg H8aJG3cPAzI5u1o7WbXT3TwzHvi2EMFfK8Q5Gp9tfW7r1ujJn28YsrR6fnSmJIpSck23 Dd5Q== X-Gm-Message-State: AOJu0Ywcw13Ce23DR/bUDpGbqNvj6Ke4Vg0vCOAFEoJ2z76B/rZIenLP firqA2wIwMq5+XcLC3lCv07xZt/MExXljPp7QQMlSuM44lq8vKAcxDkHvtBv3i6bfwG0054auR6 7 X-Gm-Gg: ASbGncsuGI+snCf9LYLMFGo65c8l+o++YK2uLK6UeJaUzIgwJplE6Tf78wGlZUwNwMs h5iM68putOGZpYXrq9lUX57bYAL6kgaW5/rb7ZNlZgAE4WkEoOPKPjYxmZnRRgwU6FV+Nq2shDt b5sa0GrBk9Pj69TpBdoXRbK1b520UitzW72hIPYyvAzu7M6TvRqfEI5KQOEkkIqwRFsXD7ayROC gzejT+bAl9vrshPqxSETa/Mc1K1TvUbfZ3pE5vgVmTTVV5S4XVU9gvAmRtoVXG4PFQLcqqVTMjx V0DTrNpiHjbq X-Google-Smtp-Source: AGHT+IF+QXNeYBn8x47rTINS0443LNhDAQzMuDd3GIKihElheV0xl8GytMIuFKZnCg9DDqHKB9LaXw== X-Received: by 2002:a17:907:7e95:b0:aa6:715a:75b5 with SMTP id a640c23a62f3a-ab38b44d44fmr1925925766b.46.1737588176222; Wed, 22 Jan 2025 15:22:56 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V2 14/20] qemu: Add support for mapped-ram on restore Date: Wed, 22 Jan 2025 16:16:48 -0700 Message-ID: <20250122232228.19306-15-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250122232228.19306-1-jfehlig@suse.com> References: <20250122232228.19306-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: QB4ORGCZHSXMC4RO6FGXMXTP5IJ5B5D4 X-Message-ID-Hash: QB4ORGCZHSXMC4RO6FGXMXTP5IJ5B5D4 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: 1737588630430019000 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 | 26 +++++++++++++----- src/qemu/qemu_migration.c | 12 ++++---- src/qemu/qemu_process.c | 58 +++++++++++++++++++++++++++++++-------- src/qemu/qemu_process.h | 15 ++++++---- src/qemu/qemu_saveimage.c | 12 +++++--- src/qemu/qemu_saveimage.h | 2 ++ src/qemu/qemu_snapshot.c | 8 +++--- 7 files changed, 95 insertions(+), 38 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 5afc2ea846..ad58ec92f1 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, false) <= 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,7 @@ qemuDomainSaveImageDefineXML(virConnectPtr conn, cons= t char *path, if (qemuSaveImageGetMetadata(driver, NULL, path, &def, &data, false) <= 0) goto cleanup; =20 - fd =3D qemuSaveImageOpen(driver, path, 0, NULL, false); + fd =3D qemuSaveImageOpen(driver, path, 0, false, NULL, false); =20 if (fd < 0) goto cleanup; @@ -6107,6 +6113,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, true= ); if (ret < 0) { @@ -6115,7 +6123,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 @@ -6157,7 +6169,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: @@ -6363,7 +6375,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 b2f17f8006..8af6d1d3e2 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -3064,9 +3064,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) { @@ -3120,8 +3119,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 @@ -3263,7 +3263,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); @@ -3634,7 +3634,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 8d51da77c5..e5ad6f0528 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4804,6 +4804,7 @@ qemuProcessIncomingDefFree(qemuProcessIncomingDef *in= c) =20 g_free(inc->address); g_free(inc->uri); + qemuFDPassFree(inc->fdPassMigrate); g_free(inc); } =20 @@ -4817,26 +4818,54 @@ 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) { + size_t offset =3D sizeof(virQEMUSaveHeader) + data->header.data_le= n; + + if (data->header.format =3D=3D QEMU_SAVE_FORMAT_SPARSE) { + unsigned int fdsetId; + + inc->fdPassMigrate =3D qemuFDPassNew("migrate", priv); + qemuFDPassAddFD(inc->fdPassMigrate, fd, "-fd"); + qemuFDPassGetId(inc->fdPassMigrate, &fdsetId); + inc->uri =3D g_strdup_printf("file:/dev/fdset/%u,offset=3D%#lx= ", fdsetId, offset); + } else { + g_autofree char *tmp =3D g_new(char, offset); + + /* HACK: + * We provide qemu the offset in case of mapped-ram, but must = set + * the file offset for the legacy save format. Unfortunately we + * can't lseek when the fd is wrapped by virFileWrapperFd, so + * we do a needless read instead. + */ + if (saferead(*fd, tmp, offset) !=3D offset) + VIR_DEBUG("failed to read from save file"); + inc->uri =3D qemuMigrationDstGetURI(migrateFrom, *fd); + } + } 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; @@ -7879,8 +7908,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, @@ -8299,6 +8331,7 @@ qemuProcessStart(virConnectPtr conn, int migrateFd, const char *migratePath, virDomainMomentObj *snapshot, + qemuMigrationParams *migParams, virNetDevVPortProfileOp vmop, unsigned int flags) { @@ -8352,7 +8385,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 @@ -8406,6 +8439,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 @@ -8432,6 +8466,7 @@ qemuProcessStartWithMemoryState(virConnectPtr conn, const char *path, virDomainMomentObj *snapshot, virQEMUSaveData *data, + qemuMigrationParams *migParams, virDomainAsyncJob asyncJob, unsigned int start_flags, const char *reason, @@ -8446,8 +8481,7 @@ qemuProcessStartWithMemoryState(virConnectPtr conn, int rc =3D 0; int ret =3D -1; =20 - incoming =3D qemuProcessIncomingDefNew(priv->qemuCaps, NULL, "stdio", - *fd, path); + incoming =3D qemuProcessIncomingDefNew(vm, NULL, "stdio", fd, path, da= ta); if (!incoming) return -1; =20 @@ -8473,7 +8507,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 1dd6ae23c8..a6258b075c 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 3a71c23c01..3e89f88301 100644 --- a/src/qemu/qemu_saveimage.c +++ b/src/qemu/qemu_saveimage.c @@ -264,7 +264,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))) @@ -671,6 +672,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) * @@ -680,6 +682,7 @@ int qemuSaveImageOpen(virQEMUDriver *driver, const char *path, bool bypass_cache, + bool sparse, virFileWrapperFd **wrapperFd, bool open_write) { @@ -701,7 +704,7 @@ qemuSaveImageOpen(virQEMUDriver *driver, if ((fd =3D qemuDomainOpenFile(cfg, NULL, path, oflags, NULL)) < 0) return -1; =20 - if (bypass_cache && + if (!sparse && bypass_cache && !(*wrapperFd =3D virFileWrapperFdNew(&fd, path, VIR_FILE_WRAPPER_BYPASS_CACHE))) return -1; @@ -720,6 +723,7 @@ qemuSaveImageStartVM(virConnectPtr conn, int *fd, virQEMUSaveData *data, const char *path, + qemuMigrationParams *restoreParams, bool start_paused, bool reset_nvram, virDomainAsyncJob asyncJob) @@ -736,8 +740,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 7340925274..320728145a 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) @@ -102,6 +103,7 @@ int qemuSaveImageOpen(virQEMUDriver *driver, const char *path, bool bypass_cache, + bool sparse, virFileWrapperFd **wrapperFd, bool open_write); =20 diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c index 5991455a4e..cc304add88 100644 --- a/src/qemu/qemu_snapshot.c +++ b/src/qemu/qemu_snapshot.c @@ -2394,7 +2394,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 @@ -2634,7 +2634,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) { @@ -2787,7 +2787,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) { @@ -3264,7 +3264,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 Tue Sep 9 19:05:56 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=1737588588; cv=none; d=zohomail.com; s=zohoarc; b=j308rP6ExBgZJshEVvQvvgWon/BgVLUC9VRagT60k2veEOxuGb12pLCBjw4h8S9URuULd8vkn4YoclpqmURqmr19NR3R/NIRuUeV/fFvLN9l9AkUu6JoopDhl+BfX5YS5LZ3FThRgk3NKk6Gpz7FRXHO+iLjfWVaIRUQ2TY5rDE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1737588588; 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=GOx3qds9aMDz1LEWF2zyw/F6BRdDgq3FqDAWdgCWKYk=; b=ccu1K5sWEkKroOLJXi6IkOb0apimLxKZhCmbnualRPXpewevl/XyLNCQ8dW8zNye3x3Tm1Z0wAi17FDwYVePVFR3X+h7p/vttOkIwEd8XAGQpHYvC/ByHAvaDj1MxAvzLRGXgid4JR6tXlIJj8v9ZzCwhoNeMcuVRJQUdw7awqk= 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 1737588588889305.1868199124033; Wed, 22 Jan 2025 15:29:48 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 68637145A; Wed, 22 Jan 2025 18:29:48 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id EDD5413F4; Wed, 22 Jan 2025 18:23:26 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id B5E2213B8; Wed, 22 Jan 2025 18:23:18 -0500 (EST) Received: from mail-ej1-f51.google.com (mail-ej1-f51.google.com [209.85.218.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 61947130E for ; Wed, 22 Jan 2025 18:22:59 -0500 (EST) Received: by mail-ej1-f51.google.com with SMTP id a640c23a62f3a-ab651f1dd36so71800666b.0 for ; Wed, 22 Jan 2025 15:22:59 -0800 (PST) Received: from localhost (75-169-8-111.slkc.qwest.net. [75.169.8.111]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-72daba5752esm11891368b3a.146.2025.01.22.15.22.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Jan 2025 15:22:57 -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_H3, RCVD_IN_MSPIKE_WL,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=1737588178; x=1738192978; 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=ROzJAlJ0GbgBrcoqcAhd8J7r8lDIlxwZOqxUop8NDa8=; b=B4p0UMo4T8iT5gPQSDi6YCUg5r3T25e6bsXsdE+NAGRtReENeJhUz0iUa6B9LTY6JH Pmt0o8WiALCZ6kFfwQzM88tbm59JPKBXZ3SoiWHtNscCZtN6+D0moH/3QQY8uR50Qa2d IoWPCYrCYm1zqMrnhAd+vYzD884vPA3zfDyRM0epdoG0fFsLYGkq1emGAy+OCdcNUfyf 1q0I1kPPtYa9GqrMWH/uOwi+wv+lknUY6tfboiMK74LqSQZfvzItaFxHCQkT1CPBGvF8 Re8AhPe5D8b/pEkxCLriN/yYZ76UnMc6SFEBUREuaobyUgVq2lOECf4eCTxRWveZ66Do U3NQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737588178; x=1738192978; 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=ROzJAlJ0GbgBrcoqcAhd8J7r8lDIlxwZOqxUop8NDa8=; b=B1SXIfNlWKqhqxq02VLcRAT7GFzIaUraqWxxfFNLt5DIJ50a1toeE+X/tasMuOJl/W TCcz3sE3Yacz4AuAfYcGwIoFBh+DnJqFNcO/54sZZvjIIa2Ml8CTpU7zzEKEEf+JmyQE HOhf8ZsPjFSIvwA3KaCCl5TWrj+JMghfSlXA03O0AqXUy5EOIUmuB/BoLdrWtW1S4hM3 wUtABYHZtpO3J5i1AIhMyZaYzpEgSE0Cx5QnvMPMXjG+nEOniRqrUoXAjiN412XmSbcp 8S97j2AQ8/5jMTr+fBY1xYg0Acgq8Ob78E0oP6o8stufP+Pj5anQx01Y2AByEV37Fqh4 cJDQ== X-Gm-Message-State: AOJu0YwyK8LEwCBKk/exaJZ8WumQkgpHVrGFMGl/wbnhieXObmXW+AJW RWFd/hI5x6E8pOHFclg8reHV1FCTzOIndu9uKwTK8UNuivHoV5gCeAhPr2ffi1WWy87yl80dBn6 O X-Gm-Gg: ASbGncuEzNIA3o1BaQ19bmEHrnVPCvbJZUZLhk4UJT5CjU6O6WBMZ2YYu8prpRJTSBv eKWUAH99/B9pSja9vtylm2dBvtST1WK6Hq6qJJR6zmGaAEkmcZ3g/wd3rlZ/d8qdvRxK91LQ2kr FOQeV9qWh3P89sqpX+fTXypuV/fGpZnLM+ZmWJQKiFt9CTs2wgG28x0syZ+M5utDPMmekSHuZGn SBg9SOgRbKGW35sVS2nHDzu2dKGJDXg94H7zrMMGfCKIU4lsPyWIb/qSgbGIeBpo4NDmccl+fQp SVb6JTV20qKh X-Google-Smtp-Source: AGHT+IFLmcg/Gl4wK5e47NT7yTuQa1H+ZYgd1yGVx1y6wazd7/bS2VsJJGlhxx3QVmkCtvdL8taxcA== X-Received: by 2002:a17:906:f58e:b0:aa6:8e9e:1b5 with SMTP id a640c23a62f3a-ab38b1b4598mr2021917066b.3.1737588178087; Wed, 22 Jan 2025 15:22:58 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V2 15/20] qemu: Support O_DIRECT with mapped-ram on save Date: Wed, 22 Jan 2025 16:16:49 -0700 Message-ID: <20250122232228.19306-16-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250122232228.19306-1-jfehlig@suse.com> References: <20250122232228.19306-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 3VRY5XWWXXFD5OBGGJTWJ2P5I632F2GI X-Message-ID-Hash: 3VRY5XWWXXFD5OBGGJTWJ2P5I632F2GI 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: 1737588589863019000 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 ad58ec92f1..803c7be3f7 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, @@ -6124,7 +6125,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 8af6d1d3e2..61a14dc9d6 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -7135,17 +7135,36 @@ qemuMigrationSrcToLegacyFile(virQEMUDriver *driver, static int qemuMigrationSrcToMappedFile(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) @@ -7154,7 +7173,7 @@ qemuMigrationSrcToMappedFile(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; } @@ -7163,6 +7182,7 @@ qemuMigrationSrcToMappedFile(virQEMUDriver *driver, /* Helper function called while vm is active. */ int qemuMigrationSrcToFile(virQEMUDriver *driver, virDomainObj *vm, + const char *path, int *fd, virCommand *compressor, qemuMigrationParams *migParams, @@ -7200,7 +7220,7 @@ qemuMigrationSrcToFile(virQEMUDriver *driver, virDoma= inObj *vm, =20 if (migParams && qemuMigrationParamsCapEnabled(migParams, QEMU_MIGRATION_CAP_MAPPED= _RAM)) { - rc =3D qemuMigrationSrcToMappedFile(driver, vm, fd, flags, asyncJo= b); + rc =3D qemuMigrationSrcToMappedFile(driver, vm, path, fd, flags, a= syncJob); } else { rc =3D qemuMigrationSrcToLegacyFile(driver, vm, *fd, compressor, a= syncJob); } diff --git a/src/qemu/qemu_migration.h b/src/qemu/qemu_migration.h index b1f894e501..13ce9d33f2 100644 --- a/src/qemu/qemu_migration.h +++ b/src/qemu/qemu_migration.h @@ -237,6 +237,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 0faeb6b0c1..79b47333f9 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -129,6 +129,7 @@ VIR_ENUM_IMPL(qemuMigrationParam, "multifd-compression", "multifd-zlib-level", "multifd-zstd-level", + "direct-io", ); =20 typedef struct _qemuMigrationParamsAlwaysOnItem qemuMigrationParamsAlwaysO= nItem; @@ -319,6 +320,9 @@ static const qemuMigrationParamInfoItem qemuMigrationPa= ramInfo[] =3D { [QEMU_MIGRATION_PARAM_MULTIFD_ZSTD_LEVEL] =3D { .type =3D QEMU_MIGRATION_PARAM_TYPE_INT, }, + [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 @@ -784,7 +788,7 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr param= s, =20 =20 qemuMigrationParams * -qemuMigrationParamsForSave(bool sparse) +qemuMigrationParamsForSave(bool sparse, unsigned int flags) { g_autoptr(qemuMigrationParams) saveParams =3D NULL; =20 @@ -798,6 +802,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 bb24af4ef9..b326aa5bc1 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -65,6 +65,7 @@ typedef enum { QEMU_MIGRATION_PARAM_MULTIFD_COMPRESSION, QEMU_MIGRATION_PARAM_MULTIFD_ZLIB_LEVEL, QEMU_MIGRATION_PARAM_MULTIFD_ZSTD_LEVEL, + QEMU_MIGRATION_PARAM_DIRECT_IO, =20 QEMU_MIGRATION_PARAM_LAST } qemuMigrationParam; @@ -87,7 +88,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 d88e1b1ecd..385d103ad3 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -2233,7 +2233,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; @@ -2243,7 +2244,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 @@ -2255,6 +2256,8 @@ qemuMonitorMigrateToFdSet(virDomainObj *vm, =20 fdPassMigrate =3D qemuFDPassNew("migrate", priv); qemuFDPassAddFD(fdPassMigrate, fd, "-fd"); + if (*directFd !=3D -1) + qemuFDPassAddFD(fdPassMigrate, directFd, "-directio-fd"); qemuFDPassTransferMonitor(fdPassMigrate, mon); =20 if (qemuFDPassGetId(fdPassMigrate, &setId) < 0) diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 7f54203fe3..79dbe5fcd7 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -857,7 +857,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 3e89f88301..d417762749 100644 --- a/src/qemu/qemu_saveimage.c +++ b/src/qemu/qemu_saveimage.c @@ -417,7 +417,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 Tue Sep 9 19:05:56 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=1737588653; cv=none; d=zohomail.com; s=zohoarc; b=A6XxIucTJJV7sat/f6z64Fe03y7xU9E68kyqswI/cVGFoFvGAuZNEQ8KN0XZGPdLthhuZ6i7riiB4UgjMHw9ey0oGmnnhcJdkF6eXXl1PTGOx+EeHjqa6N+CMeSAVkA9IaHp+WwiqDiid5C161N5gJzb+votF7dH1WgX+kzuYEw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1737588653; 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=/5CCeUysOOrtqvdFp+LUbnWsjvlwHxbXvN3b2dh8kFc=; b=XYF5NN8nUb96pcw2srEN2db7TNBb0qYoggoNYA//lJ6/V4D/4AZBnOkLmb9kAjRS4BskCKwoBdXQWjlWx2nMqOHijUez4au1yQW94w54igTwNh7K5XED+KzmXEXNtvpojKI787vMWWoDh/OWfxrCk7+X5svYYkq17frVmMvmjew= 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 17375886531051006.7114106112708; Wed, 22 Jan 2025 15:30:53 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 7941C1123; Wed, 22 Jan 2025 18:30:52 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 2709413FB; Wed, 22 Jan 2025 18:23:33 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 8B9DB136A; Wed, 22 Jan 2025 18:23:20 -0500 (EST) Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) (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 174381382 for ; Wed, 22 Jan 2025 18:23:01 -0500 (EST) Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-38a88ba968aso214264f8f.3 for ; Wed, 22 Jan 2025 15:23:01 -0800 (PST) Received: from localhost (75-169-8-111.slkc.qwest.net. [75.169.8.111]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21c2d3d86e1sm101759455ad.172.2025.01.22.15.22.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Jan 2025 15:22: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=1737588180; x=1738192980; 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=aBO0QfJjb9o+sDQDzcn5G/F0ne/NwwP7YGTue6C4Gdw=; b=hDdRmqLZ57AFWJiEoylynx+Ge+Im+IibfV1BP3fcF/ApCScGc4rwcRIx4neailDGvH 2nuV0o9GKnBe1dVXCRaerwGmBo/UCNN+xO3xgx4eaKuCjjO8QO6fdZia2sl4pYYBj4Td uKeQayVpRPq/XWX0u+REEepUTDDN4efudojgvzfDNy/VPAvsGOfGbIW4GU2e9WdJCvdr AyQsTWrN1qZbo1gjWP8DHLS09EjJrOzsPVuNAQtg8386yfMPhus9jh2rbwt4Jg5fZRWt yOcImpMyaEIIrkZkz+3Z7l2lhJmnFEF/t9SEVcvTsnDNviN6AEzF5kMKfhHOoLxJXNJo uwrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737588180; x=1738192980; 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=aBO0QfJjb9o+sDQDzcn5G/F0ne/NwwP7YGTue6C4Gdw=; b=gqVloJoEl58JFbNyILCGie36qB41dEJWo4cebWcW98UiM25OONV3GRRhSJITmDvBdT C3b1/wTl2sGTivXGrZhiWdNcGvzVQpINeiAt7nKYI4sOYAVjtnFcpAs29c1Q8ZBbb8Ph hdV8kikMwrz8U0Z63VBUtbEh2m/9MflEPRq1ODWFtqWa5EbAOWDt2oCrCW9TbzK+8m6x HRn+mr+/fAAKfRXAp7y/jP1R+FfbwsZnNa/qPx9y170pnXwAdkPzRkfCIUZ5NF1adfGO Wp2fFAVeizyVAC1x0A2d0decMgMp5iEUhIcUV4tdZAqbHIguCAMdUS3v4eGbvh854u9n ESuA== X-Gm-Message-State: AOJu0YzaQRBby1/Lzrp78Cnc7PmKec5OCsVMbCecsCCs4eNO0yM+K91R Q55aQP8b8K5gHevMpyefXVtoanjAOZE+/R2dRAJ41FqO97y2/i2MyGi73xYEuHCl+8MQVf6+jfv 3 X-Gm-Gg: ASbGncu3Jq4pdyDcaEd0CzZHue8gf70OtxAganD3kOUvs3Fgoip8n/47r9xNdP1jbX3 9Xnlq/s+S1gTWpxRGiscUqa7isXuBC1e1pQIkOrCIS10HTBWr3vFK+3BDBhJonrEWSiZp98O3GY lOdyYl4PpQeeRYbuF3b0JG7TZ6XNg+u1KJhCWddore5tNrfRFGWytum5P+dO9VAh0gbcJO0UStg /vUJE+7Ts1u+P/aMwsLsHN2QtjrQbsXg8aPUsel+gji9rKRmTKqbfne61JQtr5ifUcv6sZv4gCi hN+FMHZ4oYPj X-Google-Smtp-Source: AGHT+IEmdwD6U/ztv3nj77VX48nCJxr2v4gnZYufUTBWzoUQVYJiFHiLNItCxPxJ7xohA0vGqvXd5w== X-Received: by 2002:a05:6000:1faa:b0:38b:f4db:d56b with SMTP id ffacd0b85a97d-38bf56662d2mr26940730f8f.25.1737588180032; Wed, 22 Jan 2025 15:23:00 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V2 16/20] qemu: Support O_DIRECT with mapped-ram on restore Date: Wed, 22 Jan 2025 16:16:50 -0700 Message-ID: <20250122232228.19306-17-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250122232228.19306-1-jfehlig@suse.com> References: <20250122232228.19306-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: HOYNQOXJIYBLR7RG4JUHSWVYQCURDGUH X-Message-ID-Hash: HOYNQOXJIYBLR7RG4JUHSWVYQCURDGUH 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: 1737588654230019000 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 61a14dc9d6..84d7710462 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -3059,7 +3059,8 @@ qemuMigrationDstPrepareCleanup(virQEMUDriver *driver, } =20 static qemuProcessIncomingDef * -qemuMigrationDstPrepare(virDomainObj *vm, +qemuMigrationDstPrepare(virQEMUDriver *driver, + virDomainObj *vm, bool tunnel, const char *protocol, const char *listenAddress, @@ -3119,9 +3120,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 @@ -3261,7 +3262,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; @@ -3633,7 +3634,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 e5ad6f0528..ad926650f7 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4818,13 +4818,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 @@ -4839,10 +4842,26 @@ qemuProcessIncomingDefNew(virDomainObj *vm, size_t offset =3D sizeof(virQEMUSaveHeader) + data->header.data_le= n; =20 if (data->header.format =3D=3D QEMU_SAVE_FORMAT_SPARSE) { + bool directio =3D false; unsigned int fdsetId; =20 inc->fdPassMigrate =3D qemuFDPassNew("migrate", priv); - qemuFDPassAddFD(inc->fdPassMigrate, fd, "-fd"); + /* When using directio with mapped-ram, qemu needs an fd witho= ut + * O_DIRECT set for reading small bits of unaligned state. */ + if (qemuMigrationParamsGetBool(migParams, QEMU_MIGRATION_PARAM= _DIRECT_IO, &directio) < 0) + goto error; + + if (directio) { + VIR_AUTOCLOSE bufferedFd =3D -1; + + if ((bufferedFd =3D qemuDomainOpenFile(cfg, NULL, path, O_= RDONLY, NULL)) < 0) + goto error; + + qemuFDPassAddFD(inc->fdPassMigrate, &bufferedFd, "-buffere= d-fd"); + qemuFDPassAddFD(inc->fdPassMigrate, fd, "direct-io-fd"); + } else { + qemuFDPassAddFD(inc->fdPassMigrate, fd, "-buffered-fd"); + } qemuFDPassGetId(inc->fdPassMigrate, &fdsetId); inc->uri =3D g_strdup_printf("file:/dev/fdset/%u,offset=3D%#lx= ", fdsetId, offset); } else { @@ -8481,7 +8500,7 @@ qemuProcessStartWithMemoryState(virConnectPtr conn, int rc =3D 0; int ret =3D -1; =20 - 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 a6258b075c..3c70835ac1 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 Tue Sep 9 19:05:56 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=1737588684; cv=none; d=zohomail.com; s=zohoarc; b=Ly6Da2FEgLYgGrCmy8cQdpIfNsMezwGLq9neyg5QxAi7qk1hUmB4jLwQtgTYWcTNmM6cq81z4KxednhkdMDKdWr0ibUpZoImSZs5zyy0kiXTBdWLqgSyGX73LaBpfJZL2b4IwczZgExCMdULCHB/kcf9Tf8JRQaSJCtXJZ1lFTE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1737588684; 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=xil4gEnJfmTZzzTRxlhqQMb4MEAtMRBdDnM7TAAFSYs=; b=C+sIM3rHl+WmUGGrRlTQvhbhkQvF1R7pUYq4tlB5jJ4JQxt2EtmccKinV6jQ5zGeZvAddsc1XtVmXH/R5U60E1UhRB8XGTfOeEXbKBJXvx4ib4WEZCWLgdKTdOn0uT/aQtdYNkDFoO619xfw4QBgorMAn5EC/kp6o+Jo8TG+VAU= 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 1737588684861355.3708266302307; Wed, 22 Jan 2025 15:31:24 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 2BC8312CD; Wed, 22 Jan 2025 18:31:24 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 2730B140F; Wed, 22 Jan 2025 18:23:34 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id E9D1B1371; Wed, 22 Jan 2025 18:23:23 -0500 (EST) Received: from mail-ej1-f46.google.com (mail-ej1-f46.google.com [209.85.218.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 0F69D1320 for ; Wed, 22 Jan 2025 18:23:03 -0500 (EST) Received: by mail-ej1-f46.google.com with SMTP id a640c23a62f3a-aaec61d0f65so70220366b.1 for ; Wed, 22 Jan 2025 15:23:02 -0800 (PST) Received: from localhost (75-169-8-111.slkc.qwest.net. [75.169.8.111]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21c2d3e1510sm100614095ad.183.2025.01.22.15.23.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Jan 2025 15:23: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_MSPIKE_H3,RCVD_IN_MSPIKE_WL, 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=1737588182; x=1738192982; 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=cNiE1uvWkLfj8s8kKaB2J6Fh7oZulWstFN8Em2IXZys=; b=Hu8+kbU3qgcYv8ul5lGUkHvwxLddMFSrZE25x90fAQd+07gofX8hAYEt1sOk7eWzPu ioAiySYywJIjANgMd4LuPW05D0NPVzzm/KIFmYV49LomFcCB4cofScBWPLQupD0tl6G2 rEJxt2JekvGIAy8pZ7cEYVPMBjwjHNKQsH5UKdVoNvSfGtuIZHhW4pEo4RfPv2+u/f5V +2dmSlSvuolSU9cbnwiNUTxg8sNKrD3c0dVf6a6xaR5bZJl6w5plixUwfYLsuuUk9pW6 aE2/AhDU84sBTWK6jVw68y4rHusDnNSg/XZMZG5UaDXYwO2Q/pBg53+uiX4FtIusbkCC Oqqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737588182; x=1738192982; 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=cNiE1uvWkLfj8s8kKaB2J6Fh7oZulWstFN8Em2IXZys=; b=uyFiO0HT0RUY8RSRjQ/xTkOMkui99+Z65FJyJU9IMflRIh63c0oi+O5ck78CJZaT4l rHEO5C2kOuKRaxiXvH6nvZUoj02N84P+BPKHO03BIj8K51NgxExy8uMzg7pG1cOXM9xr xKR3ucpA8HNrEigPOznVpF/EwTIF/SEn44AsIXGIUl/tGsEK4HB5/VV95h0ASkFFB+AT 88chwkZ1lkXinXK68XpqQv3keYMH0MwZhKeeVp3bXQBUWA7lc6cJFH6wH9M+OlPRYVHo BFx6nQDLgT+Ps6kLC/v6EvuKk9jaKrTEfbHvqQhqAMZgQIL44mEIM0CVLcdOmPqrjWBn Bkaw== X-Gm-Message-State: AOJu0YwvATDCbZC+N0YJ5acKqoBOxNf4eD3WbVNWxLdy2843C5Msgvkn iHFnzXIL2n8Lhss/YKTH3XhN/2F6RXzyTLUjk3FGJtC9So4u2bFVc8hDbUGR9OubX51dJ+fdBYB a X-Gm-Gg: ASbGncs1oDmUq9vDrfT4O4amZaPQmG8S0cw7BtztVxbQRl2Gz7gF8iQ0im2/qZU8kHd u4Z/Mlic2TaVHF7R036XDGhljH5f1faV1mAz+3irxotQu1z7U3Lhr6qhAFaxgJU08YOAd2XKGjj RmNvDvk2uq71XcsRf1UMN78yUnBTUA+hQDtAWKJt6ems2AAICXR/d+H6RUOU0OCfq3sFGHwI4w2 Sy50ZK+7bCerXCJh3h+MnEw/hYEBz3+Uu63XxzuEoxUrz3XArSi3GpUgDy6JWWz88kYwlgrmI1r CEhtEHW6KAET X-Google-Smtp-Source: AGHT+IHFmW+qM/vLR8qCPMPeDylDg9+rtnvdJtJFdDeoVKRK2uOsdy6/ZZU79rUpjh6mInlDSHefXQ== X-Received: by 2002:a17:907:6ea6:b0:aa6:2704:4840 with SMTP id a640c23a62f3a-ab38b3cfb30mr2067161566b.51.1737588181904; Wed, 22 Jan 2025 15:23:01 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V2 17/20] include: Define constants for parallel save/restore Date: Wed, 22 Jan 2025 16:16:51 -0700 Message-ID: <20250122232228.19306-18-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250122232228.19306-1-jfehlig@suse.com> References: <20250122232228.19306-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: RV253LHPQMUO3UU3RBCEKMJ4PRYNY3BF X-Message-ID-Hash: RV253LHPQMUO3UU3RBCEKMJ4PRYNY3BF 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: 1737588686401019000 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 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 2a4b81f4df..00dd13509b 100644 --- a/include/libvirt/libvirt-domain.h +++ b/include/libvirt/libvirt-domain.h @@ -1637,6 +1637,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, @@ -1682,6 +1683,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 3fb091f240..7b95748b37 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 Tue Sep 9 19:05:56 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=1737588711; cv=none; d=zohomail.com; s=zohoarc; b=WbTTQMtSjeXmTiMx62mNLMjRwNSJoSnYv4SDinCXdxfBI+dEc93fmgsKGFN4FPOr+JfXO08tIkW3pcNGM+eR9nZTAcLSp6SQhcgSSSuQGsHHbCr3IT4rtOt+TMaLR59JLd+zKuOiaWxNxIvGmXtCMTERHkNRHkjF4CdNDrqmD8k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1737588711; 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=Rk4COkXKxSUGt8IMfOAJUhophJJBAjRaUmSGWM/bWnA=; b=m3sG7i8VCkIiGKVWDR3H0QxbKqiO00SMzRtEeJxi6wZxG7xdSCZM0e9cEQshrWEClGHfl/azvxAVKWp2LnHsIlMbaGsMkDmLeKbv7bGIYaa7/XHqmUWApqtvG1v4AhiKuw2uwPKdWxPRqnhCEQnx4B9DYPQDXjVSzmhBI5yE99E= 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 1737588711549221.94545947040228; Wed, 22 Jan 2025 15:31:51 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id E1A6E1378; Wed, 22 Jan 2025 18:31:50 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 9D82613ED; Wed, 22 Jan 2025 18:23:36 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id A99BA12F8; Wed, 22 Jan 2025 18:23:29 -0500 (EST) Received: from mail-ej1-f41.google.com (mail-ej1-f41.google.com [209.85.218.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 05E4E13B2 for ; Wed, 22 Jan 2025 18:23:05 -0500 (EST) Received: by mail-ej1-f41.google.com with SMTP id a640c23a62f3a-aa67ac42819so54020266b.0 for ; Wed, 22 Jan 2025 15:23:04 -0800 (PST) Received: from localhost (75-169-8-111.slkc.qwest.net. [75.169.8.111]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-72dab9c8e37sm11556922b3a.119.2025.01.22.15.23.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Jan 2025 15:23: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_H3, RCVD_IN_MSPIKE_WL,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=1737588184; x=1738192984; 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=S+3mVvrEeTcH1iKODD0E+SOcz4pdYPLjzLrV5dMKoKY=; b=ISEwmiAOciLVX3gMfjC6iM8Jg7QVei9f9tfmAk1D4Xn4Zlefa9VaeqEMknxKl4PAbA NzSqhlRC29jX2/+YKFJ+BlWQcydDUBwUGWXH5/+zKqVmWNyw/cKJOAwGTww1ciKJkxG1 90fNSSjuVPfwt+Gsuv+EpPPjwFrUHEU+FZ7xKUwonSIJ+10bW6yGXHs/EshCU1JARNKv iypROuUzPn9VzSZivBYzONEujgPZ3KwOPR7+Ya0ddGZ4JD1vFxQDM6CTItpR3HGF3DMT eJokVSftGcQMOoEiX21Ss0+VNPRcLObaIEm8MeIimvTs1U/CAJE9xSMx3O0+JMfYy33U IMUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737588184; x=1738192984; 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=S+3mVvrEeTcH1iKODD0E+SOcz4pdYPLjzLrV5dMKoKY=; b=cKV5vRTdP99QrggYsIHSHbGo48Nia1B9bKEL38T8v/TxpvF68MzAiyPRRSb4QG+In/ l7xFItIQG5I3k/p5vq1i0i4RHbO1tVCwQEWfhH0VhZrVZzP0PpIsrYlQvm17c9vxjWUH gqGemo+5eKJR/IFYUQ0VYgcvMK4hbI7CsVd1dR/MfvZADsF1Xxx1NBaa8TfnHD0LRb08 EoWHT5+cCFcAK1+CeF9wgUw6afdNY2P+FiUvoblgjdQx6UFQ/lISBzOqRXCLghy8nZpZ LeavICU7L7e0Uq+jPEGACnroNk9VWhaZwr4bhlSFQxH4RS0fhcVAC1boJ0QaXJnkqwHU h2lA== X-Gm-Message-State: AOJu0Yypjp+WGrB9UuWkVOMG4QRicA0Wew75hadY3Jex4lPbgQ1DCGw5 pnW1LSBD0H1PVPkWUg9BgbmK6vUJLGK5b2EOAZ2jSZ+ZTup2QyrKjLGjc97bi+X/rjuOFKMPOgD X X-Gm-Gg: ASbGnct4DOQLfvUUhwsZ8p6Zh/zHltLRklIHf9esmktdLPpfpLIA+f5yHsFbpw9/hwd x4c0Nw9vHrr5D4IzA/Z5u3CBM9MlInOaf3iJuYIhbooobXy22eV9jsRB3dA2lAMWfg4HUvHnK55 LP7svpNWIhu9A4jYwzwI+uYndP4VkgSnBJygxsPo7DmXLdrzTHeOwbq++l9V3sajtyaQJLWXzSR wdesBVu5opIS7iKah6u5e3dyyOHw8Fnr1y0swdf27/rV0qmAtzMGlblXDmwjVWmuXW71uj5qh8S vCQnTIMpTWzs X-Google-Smtp-Source: AGHT+IHpSwUn1SvKIggBEamUxC1c1jMH1HmoBy0lpYiLo3hDZH8UbLaods9yZ8V6wjj/WXyoQpOXNA== X-Received: by 2002:a17:907:1c26:b0:aa6:88ae:22a with SMTP id a640c23a62f3a-ab38b3aff78mr2081620466b.37.1737588183854; Wed, 22 Jan 2025 15:23:03 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V2 18/20] qemu: Add support for parallel save and restore Date: Wed, 22 Jan 2025 16:16:52 -0700 Message-ID: <20250122232228.19306-19-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250122232228.19306-1-jfehlig@suse.com> References: <20250122232228.19306-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: IP5UGXT6KXE723OEEPTSIGM5FGGSHNSM X-Message-ID-Hash: IP5UGXT6KXE723OEEPTSIGM5FGGSHNSM 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: 1737588712568019000 Content-Type: text/plain; charset="utf-8" Add support for parallel save and restore by mapping libvirt's "parallel-connections" 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 803c7be3f7..4d8f5f08c3 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; } @@ -6125,7 +6135,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 79b47333f9..420bf2fdbe 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -788,10 +788,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 @@ -800,7 +809,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 b326aa5bc1..b6998d67a2 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -88,7 +88,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 Tue Sep 9 19:05:56 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=1737588742; cv=none; d=zohomail.com; s=zohoarc; b=AVp0cijdb+GRgC+zj3HPnWVynSDQ31P4OcfFmz1uLhqwQpV1nGCFZ5NwgTHmJdOL1x2b2ZspImx7jgIhl8d8X4wxEyaCIMP+YL7ErSk5jsnDvFVrSvMOdHbo7Kovdp76CKLBhMsMJEH6AXL1VNVklP7I47QzXLL1TNRSyNzUS0g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1737588742; 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=I6lzq0FxdVqmPWN7CqkFYhYfe48E6tELIcm6gSqfnXo=; b=D5PyBbswDQYaSIL1OhTjn1aZYIrHushMiqkHXaN9PgdtamL2mRIBguKBm11mb7Zen7nFSvHyDhmm5FTp1zjb9LXKIfkJBER+5n4gudCj24CeKB1rfl1PluwoSj9Hm36jCvaB72lUAJO4Bdi/yIkkJzrxoMAbwTuqHkuuBy5KC8k= 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 1737588742259855.4304502434612; Wed, 22 Jan 2025 15:32:22 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id D0B5413FB; Wed, 22 Jan 2025 18:32:21 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 7FF2A12C1; Wed, 22 Jan 2025 18:23:40 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 5E9F313AD; Wed, 22 Jan 2025 18:23:30 -0500 (EST) Received: from mail-ed1-f52.google.com (mail-ed1-f52.google.com [209.85.208.52]) (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 D6A1913B0 for ; Wed, 22 Jan 2025 18:23:06 -0500 (EST) Received: by mail-ed1-f52.google.com with SMTP id 4fb4d7f45d1cf-5d3d0205bd5so491957a12.3 for ; Wed, 22 Jan 2025 15:23:06 -0800 (PST) Received: from localhost (75-169-8-111.slkc.qwest.net. [75.169.8.111]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21c2d3deb6csm101293965ad.175.2025.01.22.15.23.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Jan 2025 15:23: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=1737588186; x=1738192986; 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=bdusarzrhB3IYH7ZUAjJPhUgLK6W7/TW4bbma/26O8s=; b=SS9Gb8oRqMabnpD5SkUAqBvAtQfhvePu71HhlMC6mByJwmIH3ghdNac3NaDYkmJw7U H/AeaH9orikYsYA3Iuk9UE6fGXdKxSjIcGFwHVGTsu1fu/BQ6YKEfCq8aKOTzqi+32EW 2s26FU5KB55XxUIcjgTEzE96GHuwjjpIu/XHvccOwf/9X9cmHA4PLhDIHoN6hAmtVESS z9hy6+RUrpIN9igCRhdPE3FDiu2hLYd1m8AlfrdkM6mgKlm4W9VLMHgB5gxjWFQFdsOK L237YtwgnJxITgkcqTc/AAloYWF+Ea56mchln+T6FPiFwux/a38l+BQC69oeRNXh3EKL l1Lw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737588186; x=1738192986; 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=bdusarzrhB3IYH7ZUAjJPhUgLK6W7/TW4bbma/26O8s=; b=OV2mcaPc+T1YtwGhBnTeQnPlqY0I0B619OsY+mdPDkNx19uOJzIK8qBvQnGrpixMsZ UTFUaHSg+E+6zx3/+0y7NIfY1Rbzz1MbXYudV1kykRn9z2ScbWfIdwVFTjt9LVWTHuQv S9Fsk3z1GwJYufEClm0gSwgUc14QemuYvWm9iDla6v3iaKFqmDOhSZO2asng21o8jg70 ANB3/LY50yWFdPrXKyz/+Q5LgIZ+lEZWrab9i3qn6HuR436ciKoYkouIdx4P7OWFPk6V hXhS/3axVPoIVRYQj8UL3q53ExsoNMMEFnGQPJXxzGBtm747CY0HnauS0Pf1r516HFem zcWw== X-Gm-Message-State: AOJu0YxMar0oVC8Gu3VudCyPdgBgvyo6/yRevDty5FFzIB0xUCLmbaX/ uJiRIhnvkdskH4JGfmsv4t8iUPHUQ11LozHPi43fBaY9dwUcuEK/1CIdcIw8ZN2woJIJM9+dbpR h X-Gm-Gg: ASbGncv8YVI+F7h6EBArhwPZW/SnHUy3etMBEt+6Njh4jm8EmZegtLVr0vcG7kaVM2w rOTNPmT1ub5+F06vBCHtigNMH35jfItsJarx57V5Xaa7/4fz1qAg4t0yOQ5WIV6Nitax0pCIIky 3eDv9qviWv3zml4BHocFEXy/3ZvzKAYDVIZb0nTdWc0FIy47In8lM10uYU8TJ68Jo1bXROEHCQN DJhumAplYbqk5ssMgT14W/JaiPEv3Y6HL0XD4aLD0cMnX5jaBPvtIuE11RPgTwrevNPsyhOq/l1 H04YYNwIcHZL X-Google-Smtp-Source: AGHT+IFwD47uJwdxculPd2IJyd0nnUWju9VEEGj8sCGr3hgDUlRnTmZk1BFqoi4Xr/4WqjvxEGHI8A== X-Received: by 2002:a17:907:3602:b0:aaf:74b3:80db with SMTP id a640c23a62f3a-ab38b0b90f1mr2283015866b.3.1737588185685; Wed, 22 Jan 2025 15:23:05 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V2 19/20] tools: add parallel parameter to virsh save command Date: Wed, 22 Jan 2025 16:16:53 -0700 Message-ID: <20250122232228.19306-20-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250122232228.19306-1-jfehlig@suse.com> References: <20250122232228.19306-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: NFYQ3WQ5Q2AP5SMYYHMRIMRMZEAPORTJ X-Message-ID-Hash: NFYQ3WQ5Q2AP5SMYYHMRIMRMZEAPORTJ 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: 1737588742860019000 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 | 41 +++++++++++++++++++++++++++++++++++++---- 2 files changed, 48 insertions(+), 5 deletions(-) diff --git a/docs/manpages/virsh.rst b/docs/manpages/virsh.rst index e801037c04..669f27d2a6 100644 --- a/docs/manpages/virsh.rst +++ b/docs/manpages/virsh.rst @@ -3984,6 +3984,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 @@ -3991,8 +3992,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 @@ -4014,6 +4018,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 546db955a9..99acb45079 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 0; + int rv =3D -1; unsigned int flags =3D 0; const char *xmlfile =3D NULL; g_autofree char *xml =3D NULL; @@ -4188,15 +4201,29 @@ 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 ((rv =3D vshCommandOptInt(ctl, cmd, "parallel-channels", &nchannels= )) < 0) { + goto out; + } else if (rv > 0) { + 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 +4236,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 +4255,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 Tue Sep 9 19:05:56 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=1737588762; cv=none; d=zohomail.com; s=zohoarc; b=JdjQee3cpdXFhsGwi/7YDeADeaYuRA16x2W6mdcE7rqxNIYSwoFbu4HPNKEk4YfWVFXZ4kHA78an3rucMd4uN6JwvNwa3kB3QWT3VY8iyepMyl12hmJBBfm72iASQzlOhZja623N1WQtQF7IlfOKU9Ekvpkdznl3Ogn5zHsAvIY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1737588762; 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=YCcZChzOWBLSN0XxmPC3ZPDlqiikulRcxy7slYtEDaU=; b=acWgdM7+uZvLzGtX88Zh947GdxDOfMv4oHXW/AV8+tdsZEgvXiiCxthnFfn30wR5brDqWCJQSGuN9GBpBOGtrdkUovTnDXJ6ifMFVSVll4PV10tXby2tXWk00+2oYHMq+tIn6pCzXPu/gTMgSpcCDr7JSQJfAG0Ia43roaHniME= 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 1737588762822682.5469517101486; Wed, 22 Jan 2025 15:32:42 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 4DF8DD12; Wed, 22 Jan 2025 18:32:42 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 2CAC5142C; Wed, 22 Jan 2025 18:23:42 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 8DED71373; Wed, 22 Jan 2025 18:23:34 -0500 (EST) Received: from mail-ej1-f53.google.com (mail-ej1-f53.google.com [209.85.218.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 B9F8D1399 for ; Wed, 22 Jan 2025 18:23:08 -0500 (EST) Received: by mail-ej1-f53.google.com with SMTP id a640c23a62f3a-aab925654d9so55948966b.2 for ; Wed, 22 Jan 2025 15:23:08 -0800 (PST) Received: from localhost (75-169-8-111.slkc.qwest.net. [75.169.8.111]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21c2d404755sm100039285ad.243.2025.01.22.15.23.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Jan 2025 15:23: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_H3, RCVD_IN_MSPIKE_WL,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=1737588187; x=1738192987; 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=vqoO/+SnrwUg4PxSezCz1ZnLxqca3h5kbS0rQkx/a3o=; b=TOjd+/TrnZCQos3TQLc5eTGqhfAg9WTeuyVh5seStYJ126DKaqaKxK7Sj6uk/zcWX8 GMIhUlZNzor4GpQ4dcW/k70qIh5zFAlE0qRImyJFXyhOqP5J/qWW48kpDF/IRtxZymlz laHxCvm4ariVahjzTR3eovin4GaPscmrOvEaTijCgzqakDKHZdVyjh4xOV1vGFMI6rKB 9vU8qCib6mtkD2z84ZtawXTvEk0LhP7NTIKlQ2iKnKrDwqJfwR8i0QMjb1kAipSQyX4T Y5nGDi8n2UVCBCi7MiiK6OtfCyiOCtTzQzmcyQbvS4mjzRhq73l2OdCvSfeqbAXf0X/2 3Ptg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737588187; x=1738192987; 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=vqoO/+SnrwUg4PxSezCz1ZnLxqca3h5kbS0rQkx/a3o=; b=gD/qIjrOhGhBk5/imq0Cpm0hT/5zkU4P/c5pDE4Q5MskkbfoUxG8ng934M15fvgxDg taEH6MLLOGvtNE0nzBzkHqjsWPr3LfPkwHy+gkPU6bSiOr2hKPgNHuRJAZm0YYAsVDVO DnfHl2CtyiKIoryW5yqNyBEkEzrPSK03zMKJQQ6zVVUgfLA8ZVu+Cl8aPoG4aQYymO7F SyOBLdoggBSt6jS2w3celf9nIOOO47v2kyGD4wCNgivnRG6vXt1sy0Vv6raBmNl4F403 f1hj8xKpMN7cVkrVcXUZRZ1u+vBLoyEjFyPnTTXFja+Aho/t5lrl0hWVw+oFNpqv6CYa jlUQ== X-Gm-Message-State: AOJu0Yz/1/781Obbbl9732KiZzOnp1v5mCYv3Y1RqF0tuPSpxsOSgVuK T/LMMM0PFmTtTgOBt7JYpvmaeLpVx+VANysf5v8zvJNN+JUqxBo9GIMXTfur4ibYF/Q8ozbXhNM s X-Gm-Gg: ASbGncsFW4qFLoLxT5A51Q7Z6qTcXc1c2ly0hBRI9X0cwOyoXRy8KdV9uYkNKe3tsTX 2s5ntDxkmEEMfNXmim0leHvunksyQ013ClRYzPKM7hqZbnZcyFPdY8Om70L9RQ3dc7pf51rnGcg 9HcQUXwwAg4SBwnVl65AtGorscD1WdIpHBEWG8dtHZxy4plE7WsNaQVtTZ9AVedC2OEzs2p4GWC xerBVcHZRs1sJGzyVsk7ZvCjOFu9acZyWo1zkHLSVu63wWNzj+FIGzWT9voX2R6DZpFlJFUNZNZ Vaf43XgusraR X-Google-Smtp-Source: AGHT+IHwFbCf1w6fbZ7NA54WKiBnnhc7KdAPZ9hnYHcdPPxSZO4dObLZyNUiNSdPYryDhBd11NehLg== X-Received: by 2002:a17:907:6094:b0:aa6:33cf:b389 with SMTP id a640c23a62f3a-ab38b321474mr2076219066b.34.1737588187554; Wed, 22 Jan 2025 15:23:07 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V2 20/20] tools: add parallel parameter to virsh restore command Date: Wed, 22 Jan 2025 16:16:54 -0700 Message-ID: <20250122232228.19306-21-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250122232228.19306-1-jfehlig@suse.com> References: <20250122232228.19306-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: KS7RDQWUYHTI53K24HJVYRTPFYRRA245 X-Message-ID-Hash: KS7RDQWUYHTI53K24HJVYRTPFYRRA245 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: 1737588764989019000 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 | 38 ++++++++++++++++++++++++++++++++++---- 2 files changed, 41 insertions(+), 6 deletions(-) diff --git a/docs/manpages/virsh.rst b/docs/manpages/virsh.rst index 669f27d2a6..619ba02a31 100644 --- a/docs/manpages/virsh.rst +++ b/docs/manpages/virsh.rst @@ -3935,12 +3935,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 @@ -3956,6 +3957,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 99acb45079..1b22698afb 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -5280,6 +5280,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, @@ -5309,13 +5317,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 0; 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")) @@ -5323,15 +5334,34 @@ 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 ((rc =3D vshCommandOptInt(ctl, cmd, "parallel-channels", &nchannels= )) < 0) { + return false; + } else if (rc > 0) { + 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