On Wed, 13 Jan 2021 10:46:32 +0800 leirao <lei....@intel.com> wrote: > From: "Rao, Lei" <lei....@intel.com> > > If we don't disable the feature of auto-converge for live migration > before entering COLO mode, it will continue to run with COLO running, > and eventually the system will hang due to the CPU throttle reaching > DEFAULT_MIGRATE_MAX_CPU_THROTTLE. > > Signed-off-by: Lei Rao <lei....@intel.com> > --- > migration/migration.c | 16 +++++++++++++++- > 1 file changed, 15 insertions(+), 1 deletion(-) > > diff --git a/migration/migration.c b/migration/migration.c > index 31417ce..6ab37e5 100644 > --- a/migration/migration.c > +++ b/migration/migration.c > @@ -1673,6 +1673,20 @@ void migrate_set_block_enabled(bool value, Error > **errp) > qapi_free_MigrationCapabilityStatusList(cap); > } > > +static void colo_auto_converge_enabled(bool value, Error **errp) > +{ > + MigrationCapabilityStatusList *cap = NULL; > + > + if (migrate_colo_enabled() && migrate_auto_converge()) { > + QAPI_LIST_PREPEND(cap, > + migrate_cap_add(MIGRATION_CAPABILITY_AUTO_CONVERGE, > + value)); > + qmp_migrate_set_capabilities(cap, errp); > + qapi_free_MigrationCapabilityStatusList(cap); > + } > + cpu_throttle_stop(); > +} > +
I think it's better to error out in migration_prepare or migrate_caps_check if both colo and auto-converge is enabled. > static void migrate_set_block_incremental(MigrationState *s, bool value) > { > s->parameters.block_incremental = value; > @@ -3401,7 +3415,7 @@ static MigIterateState > migration_iteration_run(MigrationState *s) > static void migration_iteration_finish(MigrationState *s) > { > /* If we enabled cpu throttling for auto-converge, turn it off. */ > - cpu_throttle_stop(); > + colo_auto_converge_enabled(false, &error_abort); > > qemu_mutex_lock_iothread(); > switch (s->state) { --
pgp1n6ykTtAKC.pgp
Description: OpenPGP digital signature