migration: switch from .vm_was_running to .vm_old_state

No logic change here, only refactoring. That's a preparation for next
commit where we finally restore the stopped vm state on migration
failure or cancellation.

Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Message-Id: <20230517123752.21615-5-vsementsov@yandex-team.ru>
Signed-off-by: Juan Quintela <quintela@redhat.com>
This commit is contained in:
Vladimir Sementsov-Ogievskiy 2023-05-17 15:37:51 +03:00 committed by Juan Quintela
parent e76005a081
commit f4584076fc
2 changed files with 12 additions and 8 deletions

View File

@ -1402,7 +1402,7 @@ void migrate_init(MigrationState *s)
s->start_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME); s->start_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
s->total_time = 0; s->total_time = 0;
s->vm_was_running = false; s->vm_old_state = -1;
s->iteration_initial_bytes = 0; s->iteration_initial_bytes = 0;
s->threshold_size = 0; s->threshold_size = 0;
} }
@ -2287,7 +2287,8 @@ static void migration_completion(MigrationState *s)
qemu_mutex_lock_iothread(); qemu_mutex_lock_iothread();
s->downtime_start = qemu_clock_get_ms(QEMU_CLOCK_REALTIME); s->downtime_start = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER, NULL); qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER, NULL);
s->vm_was_running = runstate_is_running();
s->vm_old_state = runstate_get();
global_state_store(); global_state_store();
ret = vm_stop_force_state(RUN_STATE_FINISH_MIGRATE); ret = vm_stop_force_state(RUN_STATE_FINISH_MIGRATE);
@ -2760,12 +2761,12 @@ static void migration_iteration_finish(MigrationState *s)
case MIGRATION_STATUS_COLO: case MIGRATION_STATUS_COLO:
assert(migrate_colo()); assert(migrate_colo());
migrate_start_colo_process(s); migrate_start_colo_process(s);
s->vm_was_running = true; s->vm_old_state = RUN_STATE_RUNNING;
/* Fallthrough */ /* Fallthrough */
case MIGRATION_STATUS_FAILED: case MIGRATION_STATUS_FAILED:
case MIGRATION_STATUS_CANCELLED: case MIGRATION_STATUS_CANCELLED:
case MIGRATION_STATUS_CANCELLING: case MIGRATION_STATUS_CANCELLING:
if (s->vm_was_running) { if (s->vm_old_state == RUN_STATE_RUNNING) {
if (!runstate_check(RUN_STATE_SHUTDOWN)) { if (!runstate_check(RUN_STATE_SHUTDOWN)) {
vm_start(); vm_start();
} }
@ -3085,7 +3086,7 @@ static void *bg_migration_thread(void *opaque)
* transition in vm_stop_force_state() we need to wakeup it up. * transition in vm_stop_force_state() we need to wakeup it up.
*/ */
qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER, NULL); qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER, NULL);
s->vm_was_running = runstate_is_running(); s->vm_old_state = runstate_get();
global_state_store(); global_state_store();
/* Forcibly stop VM before saving state of vCPUs and devices */ /* Forcibly stop VM before saving state of vCPUs and devices */

View File

@ -25,6 +25,7 @@
#include "net/announce.h" #include "net/announce.h"
#include "qom/object.h" #include "qom/object.h"
#include "postcopy-ram.h" #include "postcopy-ram.h"
#include "sysemu/runstate.h"
struct PostcopyBlocktimeContext; struct PostcopyBlocktimeContext;
@ -317,12 +318,14 @@ struct MigrationState {
int64_t expected_downtime; int64_t expected_downtime;
bool capabilities[MIGRATION_CAPABILITY__MAX]; bool capabilities[MIGRATION_CAPABILITY__MAX];
int64_t setup_time; int64_t setup_time;
/* /*
* Whether guest was running when we enter the completion stage. * State before stopping the vm by vm_stop_force_state().
* If migration is interrupted by any reason, we need to continue * If migration is interrupted by any reason, we need to continue
* running the guest on source. * running the guest on source if it was running or restore its stopped
* state.
*/ */
bool vm_was_running; RunState vm_old_state;
/* Flag set once the migration has been asked to enter postcopy */ /* Flag set once the migration has been asked to enter postcopy */
bool start_postcopy; bool start_postcopy;