On Mon, Apr 29, 2024 at 08:55:14AM -0700, Steve Sistare wrote: > Provide the VMStateDescription precreate field to mark objects that must > be loaded on the incoming side before devices have been created, because > they provide properties that will be needed at creation time. They will > be saved to and loaded from their own QEMUFile, via > qemu_savevm_precreate_save and qemu_savevm_precreate_load, but these > functions are not yet called in this patch. Allow them to be called > before or after normal migration is active, when current_migration and > current_incoming are not valid. > > Signed-off-by: Steve Sistare <steven.sist...@oracle.com> > --- > include/migration/vmstate.h | 6 ++++ > migration/savevm.c | 69 > +++++++++++++++++++++++++++++++++++++++++---- > migration/savevm.h | 3 ++ > 3 files changed, 73 insertions(+), 5 deletions(-) > > diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h > index 294d2d8..4691334 100644 > --- a/include/migration/vmstate.h > +++ b/include/migration/vmstate.h > @@ -198,6 +198,12 @@ struct VMStateDescription { > * a QEMU_VM_SECTION_START section. > */ > bool early_setup; > + > + /* > + * Send/receive this object in the precreate migration stream. > + */ > + bool precreate; > + > int version_id; > int minimum_version_id; > MigrationPriority priority; > diff --git a/migration/savevm.c b/migration/savevm.c > index 9789823..a30bcd9 100644 > --- a/migration/savevm.c > +++ b/migration/savevm.c > @@ -239,6 +239,7 @@ static SaveState savevm_state = { > > #define SAVEVM_FOREACH(se, entry) \ > QTAILQ_FOREACH(se, &savevm_state.handlers, entry) \ > + if (!se->vmsd || !se->vmsd->precreate) > > #define SAVEVM_FOREACH_ALL(se, entry) \ > QTAILQ_FOREACH(se, &savevm_state.handlers, entry) > @@ -1006,13 +1007,19 @@ static void save_section_header(QEMUFile *f, > SaveStateEntry *se, > } > } > > +static bool send_section_footer(SaveStateEntry *se) > +{ > + return (se->vmsd && se->vmsd->precreate) || > + migrate_get_current()->send_section_footer; > +}
Does the precreate vmsd "require" the footer? Or it should also work? IMHO it's less optimal to bind features without good reasons. Thanks, -- Peter Xu