Blame SOURCES/kvm-migration-pause-before-switchover-for-postcopy.patch

9bac43
From 2dc02b39b051394ddbd01aec19bf2f0658d9b56c Mon Sep 17 00:00:00 2001
9bac43
From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
9bac43
Date: Wed, 25 Oct 2017 18:28:38 +0200
9bac43
Subject: [PATCH 19/19] migration: pause-before-switchover for postcopy
9bac43
9bac43
RH-Author: Dr. David Alan Gilbert <dgilbert@redhat.com>
9bac43
Message-id: <20171025182838.31829-8-dgilbert@redhat.com>
9bac43
Patchwork-id: 77441
9bac43
O-Subject: [RHV-7.5 qemu-kvm-rhev PATCH 7/7] migration: pause-before-switchover for postcopy
9bac43
Bugzilla: 1497120
9bac43
RH-Acked-by: Peter Xu <peterx@redhat.com>
9bac43
RH-Acked-by: Juan Quintela <quintela@redhat.com>
9bac43
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
9bac43
9bac43
From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
9bac43
9bac43
Add pause-before-switchover support for postcopy.
9bac43
After starting postcopy it will transition
9bac43
    active->pre-switchover->postcopy_active
9bac43
9bac43
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
9bac43
Reviewed-by: Peter Xu <peterx@redhat.com>
9bac43
Reviewed-by: Juan Quintela <quintela@redhat.com>
9bac43
Signed-off-by: Juan Quintela <quintela@redhat.com>
9bac43
(cherry picked from commit 0331c8cabf6168aa263aa0b25f5e135b328606ac)
9bac43
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
9bac43
---
9bac43
 migration/migration.c | 29 ++++++++++++++++++++++-------
9bac43
 1 file changed, 22 insertions(+), 7 deletions(-)
9bac43
9bac43
diff --git a/migration/migration.c b/migration/migration.c
9bac43
index 3f23ed0..1288697 100644
9bac43
--- a/migration/migration.c
9bac43
+++ b/migration/migration.c
9bac43
@@ -105,6 +105,9 @@ bool migrate_pre_2_2;
9bac43
 static MigrationState *current_migration;
9bac43
 
9bac43
 static bool migration_object_check(MigrationState *ms, Error **errp);
9bac43
+static int migration_maybe_pause(MigrationState *s,
9bac43
+                                 int *current_active_state,
9bac43
+                                 int new_state);
9bac43
 
9bac43
 void migration_object_init(void)
9bac43
 {
9bac43
@@ -1717,8 +1720,11 @@ static int postcopy_start(MigrationState *ms, bool *old_vm_running)
9bac43
     QEMUFile *fb;
9bac43
     int64_t time_at_stop = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
9bac43
     bool restart_block = false;
9bac43
-    migrate_set_state(&ms->state, MIGRATION_STATUS_ACTIVE,
9bac43
-                      MIGRATION_STATUS_POSTCOPY_ACTIVE);
9bac43
+    int cur_state = MIGRATION_STATUS_ACTIVE;
9bac43
+    if (!migrate_pause_before_switchover()) {
9bac43
+        migrate_set_state(&ms->state, MIGRATION_STATUS_ACTIVE,
9bac43
+                          MIGRATION_STATUS_POSTCOPY_ACTIVE);
9bac43
+    }
9bac43
 
9bac43
     trace_postcopy_start();
9bac43
     qemu_mutex_lock_iothread();
9bac43
@@ -1732,6 +1738,12 @@ static int postcopy_start(MigrationState *ms, bool *old_vm_running)
9bac43
         goto fail;
9bac43
     }
9bac43
 
9bac43
+    ret = migration_maybe_pause(ms, &cur_state,
9bac43
+                                MIGRATION_STATUS_POSTCOPY_ACTIVE);
9bac43
+    if (ret < 0) {
9bac43
+        goto fail;
9bac43
+    }
9bac43
+
9bac43
     ret = bdrv_inactivate_all();
9bac43
     if (ret < 0) {
9bac43
         goto fail;
9bac43
@@ -1866,7 +1878,9 @@ fail:
9bac43
  * migrate_pause_before_switchover called with the iothread locked
9bac43
  * Returns: 0 on success
9bac43
  */
9bac43
-static int migration_maybe_pause(MigrationState *s, int *current_active_state)
9bac43
+static int migration_maybe_pause(MigrationState *s,
9bac43
+                                 int *current_active_state,
9bac43
+                                 int new_state)
9bac43
 {
9bac43
     if (!migrate_pause_before_switchover()) {
9bac43
         return 0;
9bac43
@@ -1887,11 +1901,11 @@ static int migration_maybe_pause(MigrationState *s, int *current_active_state)
9bac43
                       MIGRATION_STATUS_PRE_SWITCHOVER);
9bac43
     qemu_sem_wait(&s->pause_sem);
9bac43
     migrate_set_state(&s->state, MIGRATION_STATUS_PRE_SWITCHOVER,
9bac43
-                      MIGRATION_STATUS_DEVICE);
9bac43
-    *current_active_state = MIGRATION_STATUS_DEVICE;
9bac43
+                      new_state);
9bac43
+    *current_active_state = new_state;
9bac43
     qemu_mutex_lock_iothread();
9bac43
 
9bac43
-    return s->state == MIGRATION_STATUS_DEVICE ? 0 : -EINVAL;
9bac43
+    return s->state == new_state ? 0 : -EINVAL;
9bac43
 }
9bac43
 
9bac43
 /**
9bac43
@@ -1920,7 +1934,8 @@ static void migration_completion(MigrationState *s, int current_active_state,
9bac43
             bool inactivate = !migrate_colo_enabled();
9bac43
             ret = vm_stop_force_state(RUN_STATE_FINISH_MIGRATE);
9bac43
             if (ret >= 0) {
9bac43
-                ret = migration_maybe_pause(s, &current_active_state);
9bac43
+                ret = migration_maybe_pause(s, &current_active_state,
9bac43
+                                            MIGRATION_STATUS_DEVICE);
9bac43
             }
9bac43
             if (ret >= 0) {
9bac43
                 qemu_file_set_rate_limit(s->to_dst_file, INT64_MAX);
9bac43
-- 
9bac43
1.8.3.1
9bac43