Create a subroutine for preserving the runstate after migration, to be used in a subsequent patch. No functional change.
Signed-off-by: Steve Sistare <steven.sist...@oracle.com> Reviewed-by: Fabiano Rosas <faro...@suse.de> --- migration/migration.c | 37 ++++++++++++++++++++++--------------- migration/migration.h | 1 + migration/savevm.c | 13 +------------ 3 files changed, 24 insertions(+), 27 deletions(-) diff --git a/migration/migration.c b/migration/migration.c index 5bcc761..a9ecb66 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -486,21 +486,8 @@ static void process_incoming_migration_bh(void *opaque) dirty_bitmap_mig_before_vm_start(); - if (!global_state_received() || - global_state_get_runstate() == RUN_STATE_RUNNING) { - if (autostart) { - vm_start(); - } else { - runstate_set(RUN_STATE_PAUSED); - } - } else if (migration_incoming_colo_enabled()) { - migration_incoming_disable_colo(); - vm_start(); - } else if (global_state_get_runstate() == RUN_STATE_SUSPENDED) { - vm_prepare_start(false, global_state_get_runstate()); - } else { - runstate_set(global_state_get_runstate()); - } + migrate_set_runstate(); + /* * This must happen after any state changes since as soon as an external * observer sees this event they might start to prod at the VM assuming @@ -1143,6 +1130,26 @@ void migrate_set_state(int *state, int old_state, int new_state) } } +void migrate_set_runstate(void) +{ + RunState state = global_state_get_runstate(); + + if (!global_state_received() || state == RUN_STATE_RUNNING) { + if (autostart) { + vm_start(); + } else { + runstate_set(RUN_STATE_PAUSED); + } + } else if (migration_incoming_colo_enabled()) { + migration_incoming_disable_colo(); + vm_start(); + } else if (state == RUN_STATE_SUSPENDED) { + vm_prepare_start(false, state); + } else { + runstate_set(state); + } +} + static void migrate_fd_cleanup(MigrationState *s) { qemu_bh_delete(s->cleanup_bh); diff --git a/migration/migration.h b/migration/migration.h index 6eea18d..45e9805 100644 --- a/migration/migration.h +++ b/migration/migration.h @@ -456,6 +456,7 @@ struct MigrationState { }; void migrate_set_state(int *state, int old_state, int new_state); +void migrate_set_runstate(void); void migration_fd_process_incoming(QEMUFile *f, Error **errp); void migration_ioc_process_incoming(QIOChannel *ioc, Error **errp); diff --git a/migration/savevm.c b/migration/savevm.c index bae0a1a..eba3653 100644 --- a/migration/savevm.c +++ b/migration/savevm.c @@ -2070,18 +2070,7 @@ static void loadvm_postcopy_handle_run_bh(void *opaque) dirty_bitmap_mig_before_vm_start(); - if (!global_state_received() || - global_state_get_runstate() == RUN_STATE_RUNNING) { - if (autostart) { - vm_start(); - } else { - runstate_set(RUN_STATE_PAUSED); - } - } else if (global_state_get_runstate() == RUN_STATE_SUSPENDED) { - vm_prepare_start(false, RUN_STATE_SUSPENDED); - } else { - runstate_set(global_state_get_runstate()); - } + migrate_set_runstate(); qemu_bh_delete(mis->bh); -- 1.8.3.1