On Tue, Jul 22, 2025 at 12:41:22PM +0000, Jonah Palmer wrote: > Adds a new migration capability 'virtio-iterative' that will allow > virtio devices, where supported, to iteratively migrate configuration > changes that occur during the migration process. > > This capability is added to the validated capabilities list to ensure > both the source and destination support it before enabling. > > The capability defaults to off to maintain backward compatibility. > > To enable the capability via HMP: > (qemu) migrate_set_capability virtio-iterative on > > To enable the capability via QMP: > {"execute": "migrate-set-capabilities", "arguments": { > "capabilities": [ > { "capability": "virtio-iterative", "state": true } > ] > } > } > > Signed-off-by: Jonah Palmer <jonah.pal...@oracle.com> > --- > migration/savevm.c | 1 + > qapi/migration.json | 7 ++++++- > 2 files changed, 7 insertions(+), 1 deletion(-) > > diff --git a/migration/savevm.c b/migration/savevm.c > index bb04a4520d..40a2189866 100644 > --- a/migration/savevm.c > +++ b/migration/savevm.c > @@ -279,6 +279,7 @@ static bool should_validate_capability(int capability) > switch (capability) { > case MIGRATION_CAPABILITY_X_IGNORE_SHARED: > case MIGRATION_CAPABILITY_MAPPED_RAM: > + case MIGRATION_CAPABILITY_VIRTIO_ITERATIVE: > return true; > default: > return false; > diff --git a/qapi/migration.json b/qapi/migration.json > index 4963f6ca12..8f042c3ba5 100644 > --- a/qapi/migration.json > +++ b/qapi/migration.json > @@ -479,6 +479,11 @@ > # each RAM page. Requires a migration URI that supports seeking, > # such as a file. (since 9.0) > # > +# @virtio-iterative: Enable iterative migration for virtio devices, if > +# the device supports it. When enabled, and where supported, virtio > +# devices will track and migrate configuration changes that may > +# occur during the migration process. (Since 10.1) > +#
Having a migration capability to enable iterative support for a specific type of device sounds wrong. If virtio will be able to support iterative saves, it could provide the save_live_iterate() function. Any explanation why it needs to be a migration capability? > # Features: > # > # @unstable: Members @x-colo and @x-ignore-shared are experimental. > @@ -498,7 +503,7 @@ > { 'name': 'x-ignore-shared', 'features': [ 'unstable' ] }, > 'validate-uuid', 'background-snapshot', > 'zero-copy-send', 'postcopy-preempt', 'switchover-ack', > - 'dirty-limit', 'mapped-ram'] } > + 'dirty-limit', 'mapped-ram', 'virtio-iterative'] } > > ## > # @MigrationCapabilityStatus: > -- > 2.47.1 > -- Peter Xu