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(); +} + 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) { -- 1.8.3.1