From: Arun Menon <armenon@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Peter Xu" <peterx@redhat.com>, "Fabiano Rosas" <farosas@suse.de>,
"Alex Bennée" <alex.bennee@linaro.org>,
"Akihiko Odaki" <odaki@rsg.ci.i.u-tokyo.ac.jp>,
"Dmitry Osipenko" <dmitry.osipenko@collabora.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
"Cornelia Huck" <cohuck@redhat.com>,
"Halil Pasic" <pasic@linux.ibm.com>,
"Eric Farman" <farman@linux.ibm.com>,
"Thomas Huth" <thuth@redhat.com>,
"Christian Borntraeger" <borntraeger@linux.ibm.com>,
"Matthew Rosato" <mjrosato@linux.ibm.com>,
"Richard Henderson" <richard.henderson@linaro.org>,
"David Hildenbrand" <david@redhat.com>,
"Ilya Leoshkevich" <iii@linux.ibm.com>,
"Nicholas Piggin" <npiggin@gmail.com>,
"Harsh Prateek Bora" <harshpb@linux.ibm.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Fam Zheng" <fam@euphon.net>,
"Alex Williamson" <alex.williamson@redhat.com>,
"Cédric Le Goater" <clg@redhat.com>,
"Steve Sistare" <steven.sistare@oracle.com>,
"Marc-André Lureau" <marcandre.lureau@redhat.com>,
qemu-s390x@nongnu.org, qemu-ppc@nongnu.org,
"Hailiang Zhang" <zhanghailiang@xfusion.com>,
"Stefan Berger" <stefanb@linux.vnet.ibm.com>,
"Peter Maydell" <peter.maydell@linaro.org>,
qemu-arm@nongnu.org, "Arun Menon" <armenon@redhat.com>
Subject: [PATCH v10 25/27] migration: Rename post_save() to cleanup_save() and make it void
Date: Fri, 08 Aug 2025 12:43:51 +0530 [thread overview]
Message-ID: <20250808-propagate_tpm_error-v10-25-3e81a1d419b2@redhat.com> (raw)
In-Reply-To: <20250808-propagate_tpm_error-v10-0-3e81a1d419b2@redhat.com>
The post_save() function call is responsible for cleaning up resources
after the device state has been saved.
Currently it is infallible, and does not return an error.
It is called regardless of whether there is a preceding error from
save or subsection save. That is, save and post_save() together are
considered to be an atomic logical operation.
It should not be confused as a counterpart of the post_load() function
because post_load() does some sanity checks and returns an error if it
fails. This commit, therefore, renames post_save() to cleanup_save()
and makes it a void function.
Signed-off-by: Arun Menon <armenon@redhat.com>
---
docs/devel/migration/main.rst | 2 +-
hw/ppc/spapr_pci.c | 5 ++---
include/migration/vmstate.h | 2 +-
migration/savevm.c | 5 ++---
migration/vmstate.c | 12 ++++--------
target/arm/machine.c | 6 ++----
6 files changed, 12 insertions(+), 20 deletions(-)
diff --git a/docs/devel/migration/main.rst b/docs/devel/migration/main.rst
index 6493c1d2bca48a2fa34d92f6c0979c215c56b8d5..a39fec2e21c26c4315c0cf13b105176d70679d4d 100644
--- a/docs/devel/migration/main.rst
+++ b/docs/devel/migration/main.rst
@@ -439,7 +439,7 @@ The functions to do that are inside a vmstate definition, and are called:
This function is called before we save the state of one device.
-- ``int (*post_save)(void *opaque);``
+- ``void (*cleanup_save)(void *opaque);``
This function is called after we save the state of one device
(even upon failure, unless the call to pre_save returned an error).
diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c
index 1ac1185825e84ca908fd878f6cbe7e8cacac1d89..135265f075dff502af59fbc91babca1f9a26c54d 100644
--- a/hw/ppc/spapr_pci.c
+++ b/hw/ppc/spapr_pci.c
@@ -2118,14 +2118,13 @@ static int spapr_pci_pre_save(void *opaque)
return 0;
}
-static int spapr_pci_post_save(void *opaque)
+static void spapr_pci_cleanup_save(void *opaque)
{
SpaprPhbState *sphb = opaque;
g_free(sphb->msi_devs);
sphb->msi_devs = NULL;
sphb->msi_devs_num = 0;
- return 0;
}
static int spapr_pci_post_load(void *opaque, int version_id)
@@ -2152,7 +2151,7 @@ static const VMStateDescription vmstate_spapr_pci = {
.version_id = 2,
.minimum_version_id = 2,
.pre_save = spapr_pci_pre_save,
- .post_save = spapr_pci_post_save,
+ .cleanup_save = spapr_pci_cleanup_save,
.post_load = spapr_pci_post_load,
.fields = (const VMStateField[]) {
VMSTATE_UINT64_EQUAL(buid, SpaprPhbState, NULL),
diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h
index 5fe9bbf39058d0cf97c1adab54cc516dbe8dc32a..c1d8e5b7a7d9d544fc8ce181372660f5538ef66b 100644
--- a/include/migration/vmstate.h
+++ b/include/migration/vmstate.h
@@ -208,7 +208,7 @@ struct VMStateDescription {
int (*pre_load)(void *opaque);
int (*post_load)(void *opaque, int version_id);
int (*pre_save)(void *opaque);
- int (*post_save)(void *opaque);
+ void (*cleanup_save)(void *opaque);
bool (*needed)(void *opaque);
bool (*dev_unplug_pending)(void *opaque);
diff --git a/migration/savevm.c b/migration/savevm.c
index 06cb9c465a24fd7f96bd36735feaeeddf268cc87..fabf948e74e471eb9f29ee10055c0041f399956e 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -322,14 +322,13 @@ static int configuration_pre_save(void *opaque)
return 0;
}
-static int configuration_post_save(void *opaque)
+static void configuration_cleanup_save(void *opaque)
{
SaveState *state = opaque;
g_free(state->capabilities);
state->capabilities = NULL;
state->caps_count = 0;
- return 0;
}
static int configuration_pre_load(void *opaque)
@@ -544,7 +543,7 @@ static const VMStateDescription vmstate_configuration = {
.pre_load = configuration_pre_load,
.post_load = configuration_post_load,
.pre_save = configuration_pre_save,
- .post_save = configuration_post_save,
+ .cleanup_save = configuration_cleanup_save,
.fields = (const VMStateField[]) {
VMSTATE_UINT32(len, SaveState),
VMSTATE_VBUFFER_ALLOC_UINT32(name, SaveState, 0, NULL, len),
diff --git a/migration/vmstate.c b/migration/vmstate.c
index 4a6a33d5258cf271a0c58661b8a367eed2210601..fdb8c118721a11dd88d55eadb471a61788c3eee6 100644
--- a/migration/vmstate.c
+++ b/migration/vmstate.c
@@ -530,8 +530,8 @@ int vmstate_save_state_v(QEMUFile *f, const VMStateDescription *vmsd,
if (ret) {
error_setg(errp, "Save of field %s/%s failed",
vmsd->name, field->name);
- if (vmsd->post_save) {
- vmsd->post_save(opaque);
+ if (vmsd->cleanup_save) {
+ vmsd->cleanup_save(opaque);
}
return ret;
}
@@ -558,12 +558,8 @@ int vmstate_save_state_v(QEMUFile *f, const VMStateDescription *vmsd,
ret = vmstate_subsection_save(f, vmsd, opaque, vmdesc, errp);
- if (vmsd->post_save) {
- int ps_ret = vmsd->post_save(opaque);
- if (!ret && ps_ret) {
- ret = ps_ret;
- error_setg(errp, "post-save failed: %s", vmsd->name);
- }
+ if (vmsd->cleanup_save) {
+ vmsd->cleanup_save(opaque);
}
return ret;
}
diff --git a/target/arm/machine.c b/target/arm/machine.c
index 6986915bee876402c1bd2efb92f41ca1298c66a3..d070114da15de85fd50af71e1d8caa84f25846d8 100644
--- a/target/arm/machine.c
+++ b/target/arm/machine.c
@@ -903,15 +903,13 @@ static int cpu_pre_save(void *opaque)
return 0;
}
-static int cpu_post_save(void *opaque)
+static void cpu_cleanup_save(void *opaque)
{
ARMCPU *cpu = opaque;
if (!kvm_enabled()) {
pmu_op_finish(&cpu->env);
}
-
- return 0;
}
static int cpu_pre_load(void *opaque)
@@ -1048,7 +1046,7 @@ const VMStateDescription vmstate_arm_cpu = {
.version_id = 22,
.minimum_version_id = 22,
.pre_save = cpu_pre_save,
- .post_save = cpu_post_save,
+ .cleanup_save = cpu_cleanup_save,
.pre_load = cpu_pre_load,
.post_load = cpu_post_load,
.fields = (const VMStateField[]) {
--
2.50.1
next prev parent reply other threads:[~2025-08-08 7:19 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-08 7:13 [PATCH v10 00/27] migration: propagate vTPM errors using Error objects Arun Menon
2025-08-08 7:13 ` [PATCH v10 01/27] migration: push Error **errp into vmstate_subsection_load() Arun Menon
2025-08-08 7:13 ` [PATCH v10 02/27] migration: push Error **errp into vmstate_load_state() Arun Menon
2025-08-08 7:13 ` [PATCH v10 03/27] migration: push Error **errp into qemu_loadvm_state_header() Arun Menon
2025-08-08 7:13 ` [PATCH v10 04/27] migration: push Error **errp into vmstate_load() Arun Menon
2025-08-08 7:13 ` [PATCH v10 05/27] migration: push Error **errp into loadvm_process_command() Arun Menon
2025-08-08 7:13 ` [PATCH v10 06/27] migration: push Error **errp into loadvm_handle_cmd_packaged() Arun Menon
2025-08-08 7:13 ` [PATCH v10 07/27] migration: push Error **errp into qemu_loadvm_state() Arun Menon
2025-08-08 7:13 ` [PATCH v10 08/27] migration: push Error **errp into qemu_load_device_state() Arun Menon
2025-08-08 7:13 ` [PATCH v10 09/27] migration: push Error **errp into qemu_loadvm_state_main() Arun Menon
2025-08-08 7:13 ` [PATCH v10 10/27] migration: push Error **errp into qemu_loadvm_section_start_full() Arun Menon
2025-08-08 7:13 ` [PATCH v10 11/27] migration: push Error **errp into qemu_loadvm_section_part_end() Arun Menon
2025-08-08 7:13 ` [PATCH v10 12/27] migration: Update qemu_file_get_return_path() docs and remove dead checks Arun Menon
2025-08-08 7:13 ` [PATCH v10 13/27] migration: make loadvm_postcopy_handle_resume() void Arun Menon
2025-08-08 7:13 ` [PATCH v10 14/27] migration: push Error **errp into ram_postcopy_incoming_init() Arun Menon
2025-08-08 7:13 ` [PATCH v10 15/27] migration: push Error **errp into loadvm_postcopy_handle_advise() Arun Menon
2025-08-08 7:13 ` [PATCH v10 16/27] migration: push Error **errp into loadvm_postcopy_handle_listen() Arun Menon
2025-08-08 7:13 ` [PATCH v10 17/27] migration: push Error **errp into loadvm_postcopy_handle_run() Arun Menon
2025-08-08 7:13 ` [PATCH v10 18/27] migration: push Error **errp into loadvm_postcopy_ram_handle_discard() Arun Menon
2025-08-08 7:13 ` [PATCH v10 19/27] migration: push Error **errp into loadvm_handle_recv_bitmap() Arun Menon
2025-08-08 7:13 ` [PATCH v10 20/27] migration: Return -1 on memory allocation failure in ram.c Arun Menon
2025-08-15 14:56 ` Peter Xu
2025-08-08 7:13 ` [PATCH v10 21/27] migration: push Error **errp into loadvm_process_enable_colo() Arun Menon
2025-08-08 7:13 ` [PATCH v10 22/27] migration: push Error **errp into loadvm_postcopy_handle_switchover_start() Arun Menon
2025-08-08 7:13 ` [PATCH v10 23/27] migration: Capture error in postcopy_ram_listen_thread() Arun Menon
2025-08-08 7:13 ` [PATCH v10 24/27] migration: Remove error variant of vmstate_save_state() function Arun Menon
2025-08-08 7:13 ` Arun Menon [this message]
2025-08-08 7:13 ` [PATCH v10 26/27] migration: Add error-parameterized function variants in VMSD struct Arun Menon
2025-08-08 7:13 ` [PATCH v10 27/27] backends/tpm: Propagate vTPM error on migration failure Arun Menon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250808-propagate_tpm_error-v10-25-3e81a1d419b2@redhat.com \
--to=armenon@redhat.com \
--cc=alex.bennee@linaro.org \
--cc=alex.williamson@redhat.com \
--cc=borntraeger@linux.ibm.com \
--cc=clg@redhat.com \
--cc=cohuck@redhat.com \
--cc=david@redhat.com \
--cc=dmitry.osipenko@collabora.com \
--cc=fam@euphon.net \
--cc=farman@linux.ibm.com \
--cc=farosas@suse.de \
--cc=harshpb@linux.ibm.com \
--cc=iii@linux.ibm.com \
--cc=marcandre.lureau@redhat.com \
--cc=marcel.apfelbaum@gmail.com \
--cc=mjrosato@linux.ibm.com \
--cc=mst@redhat.com \
--cc=npiggin@gmail.com \
--cc=odaki@rsg.ci.i.u-tokyo.ac.jp \
--cc=pasic@linux.ibm.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=peterx@redhat.com \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=qemu-s390x@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=stefanb@linux.vnet.ibm.com \
--cc=steven.sistare@oracle.com \
--cc=thuth@redhat.com \
--cc=zhanghailiang@xfusion.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).