migration: put the finish part into a new function
This patch only moved the last part of migration_thread() into a new function migration_iteration_finish() to make it much shorter. With previous works to remove some local variables, now it's fairly easy to do that. Reviewed-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Peter Xu <peterx@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com>
This commit is contained in:
parent
2ad873057e
commit
199aa6d4e4
@ -2293,6 +2293,54 @@ static MigIterateState migration_iteration_run(MigrationState *s)
|
||||
return MIG_ITERATE_RESUME;
|
||||
}
|
||||
|
||||
static void migration_iteration_finish(MigrationState *s)
|
||||
{
|
||||
/* If we enabled cpu throttling for auto-converge, turn it off. */
|
||||
cpu_throttle_stop();
|
||||
|
||||
qemu_mutex_lock_iothread();
|
||||
switch (s->state) {
|
||||
case MIGRATION_STATUS_COMPLETED:
|
||||
migration_calculate_complete(s);
|
||||
runstate_set(RUN_STATE_POSTMIGRATE);
|
||||
break;
|
||||
|
||||
case MIGRATION_STATUS_ACTIVE:
|
||||
/*
|
||||
* We should really assert here, but since it's during
|
||||
* migration, let's try to reduce the usage of assertions.
|
||||
*/
|
||||
if (!migrate_colo_enabled()) {
|
||||
error_report("%s: critical error: calling COLO code without "
|
||||
"COLO enabled", __func__);
|
||||
}
|
||||
migrate_start_colo_process(s);
|
||||
/*
|
||||
* Fixme: we will run VM in COLO no matter its old running state.
|
||||
* After exited COLO, we will keep running.
|
||||
*/
|
||||
s->vm_was_running = true;
|
||||
/* Fallthrough */
|
||||
case MIGRATION_STATUS_FAILED:
|
||||
case MIGRATION_STATUS_CANCELLED:
|
||||
if (s->vm_was_running) {
|
||||
vm_start();
|
||||
} else {
|
||||
if (runstate_check(RUN_STATE_FINISH_MIGRATE)) {
|
||||
runstate_set(RUN_STATE_POSTMIGRATE);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
/* Should not reach here, but if so, forgive the VM. */
|
||||
error_report("%s: Unknown ending state %d", __func__, s->state);
|
||||
break;
|
||||
}
|
||||
qemu_bh_schedule(s->cleanup_bh);
|
||||
qemu_mutex_unlock_iothread();
|
||||
}
|
||||
|
||||
/*
|
||||
* Master migration thread on the source VM.
|
||||
* It drives the migration and pumps the data down the outgoing channel.
|
||||
@ -2371,51 +2419,7 @@ static void *migration_thread(void *opaque)
|
||||
}
|
||||
|
||||
trace_migration_thread_after_loop();
|
||||
/* If we enabled cpu throttling for auto-converge, turn it off. */
|
||||
cpu_throttle_stop();
|
||||
|
||||
qemu_mutex_lock_iothread();
|
||||
switch (s->state) {
|
||||
case MIGRATION_STATUS_COMPLETED:
|
||||
migration_calculate_complete(s);
|
||||
runstate_set(RUN_STATE_POSTMIGRATE);
|
||||
break;
|
||||
|
||||
case MIGRATION_STATUS_ACTIVE:
|
||||
/*
|
||||
* We should really assert here, but since it's during
|
||||
* migration, let's try to reduce the usage of assertions.
|
||||
*/
|
||||
if (!migrate_colo_enabled()) {
|
||||
error_report("%s: critical error: calling COLO code without "
|
||||
"COLO enabled", __func__);
|
||||
}
|
||||
migrate_start_colo_process(s);
|
||||
/*
|
||||
* Fixme: we will run VM in COLO no matter its old running state.
|
||||
* After exited COLO, we will keep running.
|
||||
*/
|
||||
s->vm_was_running = true;
|
||||
/* Fallthrough */
|
||||
case MIGRATION_STATUS_FAILED:
|
||||
case MIGRATION_STATUS_CANCELLED:
|
||||
if (s->vm_was_running) {
|
||||
vm_start();
|
||||
} else {
|
||||
if (runstate_check(RUN_STATE_FINISH_MIGRATE)) {
|
||||
runstate_set(RUN_STATE_POSTMIGRATE);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
/* Should not reach here, but if so, forgive the VM. */
|
||||
error_report("%s: Unknown ending state %d", __func__, s->state);
|
||||
break;
|
||||
}
|
||||
qemu_bh_schedule(s->cleanup_bh);
|
||||
qemu_mutex_unlock_iothread();
|
||||
|
||||
migration_iteration_finish(s);
|
||||
rcu_unregister_thread();
|
||||
return NULL;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user