]> xenbits.xensource.com Git - libvirt.git/commitdiff
cpu: Never skip CPU model name check in ppc64 driver
authorAndrea Bolognani <abologna@redhat.com>
Fri, 7 Aug 2015 15:39:09 +0000 (17:39 +0200)
committerAndrea Bolognani <abologna@redhat.com>
Tue, 11 Aug 2015 09:04:57 +0000 (11:04 +0200)
ppc64Compute(), called by cpuNodeData(), is used not only to retrieve
the driver-specific data associated to a guest CPU definition, but
also to check whether said guest CPU is compatible with the host CPU.

If the user is not interested in the CPU data, it's perfectly fine
to pass a NULL pointer instead of a return location, and the
compatibility data returned should not be affected by this. One of
the checks, specifically the one on CPU model name, was however
only performed if the return location was non-NULL.

src/cpu/cpu_ppc64.c

index 5921263067b5b6d5e2b54e38fd5055e24ff6884f..53d8fb00d8949976cda00b3e86643ae9b4621bd4 100644 (file)
@@ -407,26 +407,25 @@ ppc64Compute(virCPUDefPtr host,
         !(guest_model = ppc64ModelFromCPU(cpu, map)))
         goto cleanup;
 
-    if (guestData) {
-        if (cpu->type == VIR_CPU_TYPE_GUEST &&
-            cpu->match == VIR_CPU_MATCH_STRICT &&
-            STRNEQ(guest_model->name, host_model->name)) {
-            VIR_DEBUG("host CPU model does not match required CPU model %s",
-                      guest_model->name);
-            if (message &&
-                virAsprintf(message,
-                            _("host CPU model does not match required "
-                            "CPU model %s"),
-                            guest_model->name) < 0)
-                goto cleanup;
-
-            ret = VIR_CPU_COMPARE_INCOMPATIBLE;
+    if (cpu->type == VIR_CPU_TYPE_GUEST &&
+        cpu->match == VIR_CPU_MATCH_STRICT &&
+        STRNEQ(guest_model->name, host_model->name)) {
+        VIR_DEBUG("host CPU model does not match required CPU model %s",
+                  guest_model->name);
+        if (message &&
+            virAsprintf(message,
+                        _("host CPU model does not match required "
+                        "CPU model %s"),
+                        guest_model->name) < 0)
             goto cleanup;
-        }
 
+        ret = VIR_CPU_COMPARE_INCOMPATIBLE;
+        goto cleanup;
+    }
+
+    if (guestData)
         if (!(*guestData = ppc64MakeCPUData(arch, &guest_model->data)))
             goto cleanup;
-    }
 
     ret = VIR_CPU_COMPARE_IDENTICAL;