aboutsummaryrefslogtreecommitdiff
path: root/migration/migration.c
diff options
context:
space:
mode:
authorPeter Xu <peterx@redhat.com>2018-01-03 20:20:12 +0800
committerJuan Quintela <quintela@redhat.com>2018-01-15 12:48:10 +0100
commit39b9e17905c5ff8302c0ff17af546cbf68e0b4f6 (patch)
tree7f59719b57d2b121ece385ff5287503b8fa9f5b7 /migration/migration.c
parentcf011f082d7a2a9abfc0a257cc4de1cfcfbef24d (diff)
downloadqemu-39b9e17905c5ff8302c0ff17af546cbf68e0b4f6.zip
qemu-39b9e17905c5ff8302c0ff17af546cbf68e0b4f6.tar.gz
qemu-39b9e17905c5ff8302c0ff17af546cbf68e0b4f6.tar.bz2
migration: use switch at the end of migration
It converts the old if clauses into switch, explicitly mentions the possible migration states. The old nested "if"s are not clear on what we do on different states. Signed-off-by: Peter Xu <peterx@redhat.com> Reviewed-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com>
Diffstat (limited to 'migration/migration.c')
-rw-r--r--migration/migration.c44
1 files changed, 27 insertions, 17 deletions
diff --git a/migration/migration.c b/migration/migration.c
index c1de46a..6023218 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -2341,26 +2341,30 @@ static void *migration_thread(void *opaque)
cpu_throttle_stop();
qemu_mutex_lock_iothread();
- if (s->state == MIGRATION_STATUS_COMPLETED) {
+ switch (s->state) {
+ case MIGRATION_STATUS_COMPLETED:
migration_calculate_complete(s);
runstate_set(RUN_STATE_POSTMIGRATE);
- } else {
- if (s->state == 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;
+ 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 {
@@ -2368,6 +2372,12 @@ static void *migration_thread(void *opaque)
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();