]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
Don't verify CPU features with host-passthrough
authorJán Tomko <jtomko@redhat.com>
Mon, 29 Sep 2014 13:58:38 +0000 (15:58 +0200)
committerJán Tomko <jtomko@redhat.com>
Tue, 30 Sep 2014 08:47:02 +0000 (10:47 +0200)
Commit fba6bc4 introduced the non-migratable invtsc feature,
breaking save/migration with host-model and host-passthrough.

On hosts with this feature present it was automatically included
in the CPU definition, regardless of QEMU support.

Commit de0aeaf stopped including it by default for host-model,
but failed to fix host-passthrough.

This commit ignores checking of CPU features with host-passthrough,
since we don't pass them to QEMU (only -cpu host is passed),
allowing domains using host-passthrough that were saved with
the broken version of libvirtd to be restored.

https://bugzilla.redhat.com/show_bug.cgi?id=1147584

src/qemu/qemu_migration.c
src/qemu/qemu_process.c

index 6b38592d1535cba432f6547299bfdc86d5430c34..284cd5adbf1b03a46082ca1bfd864c0bd58dcec6 100644 (file)
@@ -1714,18 +1714,20 @@ qemuMigrationIsAllowed(virQEMUDriverPtr driver, virDomainObjPtr vm,
         return false;
     }
 
-    for (i = 0; def->cpu && i < def->cpu->nfeatures; i++) {
-        virCPUFeatureDefPtr feature = &def->cpu->features[i];
+    if (def->cpu && def->cpu->mode != VIR_CPU_MODE_HOST_PASSTHROUGH) {
+        for (i = 0; i < def->cpu->nfeatures; i++) {
+            virCPUFeatureDefPtr feature = &def->cpu->features[i];
 
-        if (feature->policy != VIR_CPU_FEATURE_REQUIRE)
-            continue;
+            if (feature->policy != VIR_CPU_FEATURE_REQUIRE)
+                continue;
 
-        /* QEMU blocks migration and save with invariant TSC enabled */
-        if (STREQ(feature->name, "invtsc")) {
-            virReportError(VIR_ERR_OPERATION_INVALID,
-                           _("domain has CPU feature: %s"),
-                           feature->name);
-            return false;
+            /* QEMU blocks migration and save with invariant TSC enabled */
+            if (STREQ(feature->name, "invtsc")) {
+                virReportError(VIR_ERR_OPERATION_INVALID,
+                               _("domain has CPU feature: %s"),
+                               feature->name);
+                return false;
+            }
         }
     }
 
index 1b8931ea2d92de555f79a2c631719c0742a43275..11eeb3ca380d449470d34d9bac1a9582d6bc8c7d 100644 (file)
@@ -3787,6 +3787,11 @@ qemuProcessVerifyGuestCPU(virQEMUDriverPtr driver,
     bool ret = false;
     size_t i;
 
+    /* no features are passed to QEMU with -cpu host
+     * so it makes no sense to verify them */
+    if (def->cpu && def->cpu->mode == VIR_CPU_MODE_HOST_PASSTHROUGH)
+        return true;
+
     switch (arch) {
     case VIR_ARCH_I686:
     case VIR_ARCH_X86_64: