[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 19/27] migration: move vm_old_running into global sta
From: |
Juan Quintela |
Subject: |
[Qemu-devel] [PULL 19/27] migration: move vm_old_running into global state |
Date: |
Mon, 15 Jan 2018 12:53:01 +0100 |
From: Peter Xu <address@hidden>
Firstly, it was passed around. Let's just move it into MigrationState
just like many other variables as state of migration, renaming it to
vm_was_running.
One thing to mention is that for postcopy, we actually don't need this
knowledge at all since postcopy can't resume a VM even if it fails (we
can see that from the old code too: when we try to resume we also check
against "entered_postcopy" variable). So further we do this:
- in postcopy_start(), we don't update vm_old_running since useless
- in migration_thread(), we don't need to check entered_postcopy when
resume, since it's only used for precopy.
Comment this out too for that variable definition.
Reviewed-by: Juan Quintela <address@hidden>
Signed-off-by: Peter Xu <address@hidden>
Signed-off-by: Juan Quintela <address@hidden>
---
migration/migration.c | 17 +++++++----------
migration/migration.h | 6 ++++++
2 files changed, 13 insertions(+), 10 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index 23f6e5092c..e26f80d9aa 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1302,6 +1302,7 @@ MigrationState *migrate_init(void)
s->start_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
s->total_time = 0;
+ s->vm_was_running = false;
return s;
}
@@ -1885,7 +1886,7 @@ static int
await_return_path_close_on_source(MigrationState *ms)
* Switch from normal iteration to postcopy
* Returns non-0 on error
*/
-static int postcopy_start(MigrationState *ms, bool *old_vm_running)
+static int postcopy_start(MigrationState *ms)
{
int ret;
QIOChannelBuffer *bioc;
@@ -1903,7 +1904,6 @@ static int postcopy_start(MigrationState *ms, bool
*old_vm_running)
trace_postcopy_start_set_run();
qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER);
- *old_vm_running = runstate_is_running();
global_state_store();
ret = vm_stop_force_state(RUN_STATE_FINISH_MIGRATE);
if (ret < 0) {
@@ -2094,11 +2094,9 @@ static int migration_maybe_pause(MigrationState *s,
*
* @s: Current migration state
* @current_active_state: The migration state we expect to be in
- * @*old_vm_running: Pointer to old_vm_running flag
* @*start_time: Pointer to time to update
*/
static void migration_completion(MigrationState *s, int current_active_state,
- bool *old_vm_running,
int64_t *start_time)
{
int ret;
@@ -2107,7 +2105,7 @@ static void migration_completion(MigrationState *s, int
current_active_state,
qemu_mutex_lock_iothread();
*start_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER);
- *old_vm_running = runstate_is_running();
+ s->vm_was_running = runstate_is_running();
ret = global_state_store();
if (!ret) {
@@ -2213,7 +2211,6 @@ static void *migration_thread(void *opaque)
int64_t threshold_size = 0;
int64_t start_time = initial_time;
int64_t end_time;
- bool old_vm_running = false;
bool entered_postcopy = false;
/* The active state we expect to be in; ACTIVE or POSTCOPY_ACTIVE */
enum MigrationStatus current_active_state = MIGRATION_STATUS_ACTIVE;
@@ -2272,7 +2269,7 @@ static void *migration_thread(void *opaque)
pend_nonpost <= threshold_size &&
atomic_read(&s->start_postcopy)) {
- if (!postcopy_start(s, &old_vm_running)) {
+ if (!postcopy_start(s)) {
current_active_state =
MIGRATION_STATUS_POSTCOPY_ACTIVE;
entered_postcopy = true;
}
@@ -2284,7 +2281,7 @@ static void *migration_thread(void *opaque)
} else {
trace_migration_thread_low_pending(pending_size);
migration_completion(s, current_active_state,
- &old_vm_running, &start_time);
+ &start_time);
break;
}
}
@@ -2357,9 +2354,9 @@ static void *migration_thread(void *opaque)
* Fixme: we will run VM in COLO no matter its old running state.
* After exited COLO, we will keep running.
*/
- old_vm_running = true;
+ s->vm_was_running = true;
}
- if (old_vm_running && !entered_postcopy) {
+ if (s->vm_was_running) {
vm_start();
} else {
if (runstate_check(RUN_STATE_FINISH_MIGRATE)) {
diff --git a/migration/migration.h b/migration/migration.h
index d1132b1cf7..4cae263992 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -123,6 +123,12 @@ struct MigrationState
int64_t expected_downtime;
bool enabled_capabilities[MIGRATION_CAPABILITY__MAX];
int64_t setup_time;
+ /*
+ * Whether guest was running when we enter the completion stage.
+ * If migration is interrupted by any reason, we need to continue
+ * running the guest on source.
+ */
+ bool vm_was_running;
/* Flag set once the migration has been asked to enter postcopy */
bool start_postcopy;
--
2.14.3
- Re: [Qemu-devel] [PULL 09/27] migration: calculate vCPU blocktime on dst side, (continued)
- [Qemu-devel] [PULL 10/27] migration: postcopy_blocktime documentation, Juan Quintela, 2018/01/15
- [Qemu-devel] [PULL 11/27] migration: add blocktime calculation into migration-test, Juan Quintela, 2018/01/15
- [Qemu-devel] [PULL 12/27] migration: add postcopy total blocktime into query-migrate, Juan Quintela, 2018/01/15
- [Qemu-devel] [PULL 13/27] migration: Guard ram_bytes_remaining against early call, Juan Quintela, 2018/01/15
- [Qemu-devel] [PULL 14/27] migration: finalize current_migration object, Juan Quintela, 2018/01/15
- [Qemu-devel] [PULL 16/27] migration: qemu_savevm_state_cleanup() in cleanup, Juan Quintela, 2018/01/15
- [Qemu-devel] [PULL 15/27] migration: assert colo instead of check, Juan Quintela, 2018/01/15
- [Qemu-devel] [PULL 17/27] migration: remove "enable_colo" var, Juan Quintela, 2018/01/15
- [Qemu-devel] [PULL 18/27] migration: split use of MigrationState.total_time, Juan Quintela, 2018/01/15
- [Qemu-devel] [PULL 19/27] migration: move vm_old_running into global state,
Juan Quintela <=
- [Qemu-devel] [PULL 20/27] migration: introduce downtime_start, Juan Quintela, 2018/01/15
- [Qemu-devel] [PULL 21/27] migration: introduce migrate_calculate_complete, Juan Quintela, 2018/01/15
- [Qemu-devel] [PULL 23/27] migration: cleanup stats update into function, Juan Quintela, 2018/01/15
- [Qemu-devel] [PULL 22/27] migration: use switch at the end of migration, Juan Quintela, 2018/01/15
- [Qemu-devel] [PULL 24/27] migration: major cleanup for migrate iterations, Juan Quintela, 2018/01/15
- [Qemu-devel] [PULL 26/27] migration: remove some block_cleanup_parameters(), Juan Quintela, 2018/01/15
- [Qemu-devel] [PULL 25/27] migration: put the finish part into a new function, Juan Quintela, 2018/01/15
- [Qemu-devel] [PULL 27/27] migration: remove notify in fd_error, Juan Quintela, 2018/01/15
- Re: [Qemu-devel] [PULL 00/27] Migration pull, Peter Maydell, 2018/01/15