3e5111
From 6d2400987412f61857070407a43dc88705cf34f6 Mon Sep 17 00:00:00 2001
3e5111
Message-Id: <6d2400987412f61857070407a43dc88705cf34f6@dist-git>
3e5111
From: Jiri Denemark <jdenemar@redhat.com>
3e5111
Date: Wed, 21 Jun 2017 15:31:38 +0200
3e5111
Subject: [PATCH] qemu: Do not skip virCPUUpdateLive if priv->origCPU is set
3e5111
3e5111
Even though we got both the original CPU (used for starting a domain)
3e5111
and the updated version (the CPU really provided by QEMU) during
3e5111
incoming migration, restore, or snapshot revert, we still need to update
3e5111
the CPU according to the data we got from the freshly started QEMU.
3e5111
Otherwise we don't know whether the CPU we got from QEMU matches the one
3e5111
before migration. We just need to keep the original CPU in
3e5111
priv->origCPU.
3e5111
3e5111
Messed up by me in v3.4.0-58-g8e34f4781.
3e5111
3e5111
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
3e5111
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
3e5111
(cherry picked from commit eabb0002ca0bba3c5a94d16fb385783de7b144a5)
3e5111
3e5111
https://bugzilla.redhat.com/show_bug.cgi?id=1441662
3e5111
3e5111
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
3e5111
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
3e5111
---
3e5111
 src/qemu/qemu_process.c | 12 ++++--------
3e5111
 1 file changed, 4 insertions(+), 8 deletions(-)
3e5111
3e5111
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
3e5111
index a7abfc720e..4d7c8d8e40 100644
3e5111
--- a/src/qemu/qemu_process.c
3e5111
+++ b/src/qemu/qemu_process.c
3e5111
@@ -3946,20 +3946,16 @@ qemuProcessUpdateLiveGuestCPU(virQEMUDriverPtr driver,
3e5111
         if (qemuProcessVerifyCPUFeatures(def, cpu) < 0)
3e5111
             goto cleanup;
3e5111
 
3e5111
-        /* Don't update the CPU if we already did so when starting a domain
3e5111
-         * during migration, restore or snapshot revert. */
3e5111
-        if (priv->origCPU) {
3e5111
-            ret = 0;
3e5111
-            goto cleanup;
3e5111
-        }
3e5111
-
3e5111
         if (!(orig = virCPUDefCopy(def->cpu)))
3e5111
             goto cleanup;
3e5111
 
3e5111
         if ((rc = virCPUUpdateLive(def->os.arch, def->cpu, cpu, disabled)) < 0) {
3e5111
             goto cleanup;
3e5111
         } else if (rc == 0) {
3e5111
-            if (!virCPUDefIsEqual(def->cpu, orig, false))
3e5111
+            /* Store the original CPU in priv if QEMU changed it and we didn't
3e5111
+             * get the original CPU via migration, restore, or snapshot revert.
3e5111
+             */
3e5111
+            if (!priv->origCPU && !virCPUDefIsEqual(def->cpu, orig, false))
3e5111
                 VIR_STEAL_PTR(priv->origCPU, orig);
3e5111
 
3e5111
             def->cpu->check = VIR_CPU_CHECK_FULL;
3e5111
-- 
3e5111
2.13.1
3e5111