Message ID | 20181105185046.2802-2-aaron@os.amperecomputing.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | More fully implement ARM PMUv3 | expand |
On 5 November 2018 at 18:51, Aaron Lindsay <aaron@os.amperecomputing.com> wrote: > In some cases it may be helpful to modify state before saving it for > migration, and then modify the state back after it has been saved. The > existing pre_save function provides half of this functionality. This > patch adds a post_save function to provide the second half. > > Signed-off-by: Aaron Lindsay <aclindsa@gmail.com> > Cc: Dr. David Alan Gilbert <dgilbert@redhat.com> > --- Reviewed-by: Peter Maydell <peter.maydell@linaro.org> David: do you want to provide a reviewed-by/acked-by for the migration vmstate API change ? thanks -- PMM
* Peter Maydell (peter.maydell@linaro.org) wrote: > On 5 November 2018 at 18:51, Aaron Lindsay <aaron@os.amperecomputing.com> wrote: > > In some cases it may be helpful to modify state before saving it for > > migration, and then modify the state back after it has been saved. The > > existing pre_save function provides half of this functionality. This > > patch adds a post_save function to provide the second half. > > > > Signed-off-by: Aaron Lindsay <aclindsa@gmail.com> > > Cc: Dr. David Alan Gilbert <dgilbert@redhat.com> > > --- > > Reviewed-by: Peter Maydell <peter.maydell@linaro.org> > > David: do you want to provide a reviewed-by/acked-by for > the migration vmstate API change ? Yep, it's much more symmetric now: Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> > thanks > -- PMM -- Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
diff --git a/docs/devel/migration.rst b/docs/devel/migration.rst index 687570754d..92fb521ad2 100644 --- a/docs/devel/migration.rst +++ b/docs/devel/migration.rst @@ -419,8 +419,13 @@ 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. -Example: You can look at hpet.c, that uses the three function to -massage the state that is transferred. +- ``int (*post_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). + +Example: You can look at hpet.c, that uses the first three functions +to massage the state that is transferred. The ``VMSTATE_WITH_TMP`` macro may be useful when the migration data doesn't match the stored device data well; it allows an diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h index 2b501d0466..9355d83056 100644 --- a/include/migration/vmstate.h +++ b/include/migration/vmstate.h @@ -185,6 +185,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); bool (*needed)(void *opaque); VMStateField *fields; const VMStateDescription **subsections; diff --git a/migration/vmstate.c b/migration/vmstate.c index 0bc240a317..c15d75260a 100644 --- a/migration/vmstate.c +++ b/migration/vmstate.c @@ -387,6 +387,9 @@ int vmstate_save_state_v(QEMUFile *f, const VMStateDescription *vmsd, if (ret) { error_report("Save of field %s/%s failed", vmsd->name, field->name); + if (vmsd->post_save) { + vmsd->post_save(opaque); + } return ret; } @@ -412,7 +415,15 @@ int vmstate_save_state_v(QEMUFile *f, const VMStateDescription *vmsd, json_end_array(vmdesc); } - return vmstate_subsection_save(f, vmsd, opaque, vmdesc); + ret = vmstate_subsection_save(f, vmsd, opaque, vmdesc); + + if (vmsd->post_save) { + int ps_ret = vmsd->post_save(opaque); + if (!ret) { + ret = ps_ret; + } + } + return ret; } static const VMStateDescription *
In some cases it may be helpful to modify state before saving it for migration, and then modify the state back after it has been saved. The existing pre_save function provides half of this functionality. This patch adds a post_save function to provide the second half. Signed-off-by: Aaron Lindsay <aclindsa@gmail.com> Cc: Dr. David Alan Gilbert <dgilbert@redhat.com> --- docs/devel/migration.rst | 9 +++++++-- include/migration/vmstate.h | 1 + migration/vmstate.c | 13 ++++++++++++- 3 files changed, 20 insertions(+), 3 deletions(-)