]> xenbits.xensource.com Git - libvirt.git/commitdiff
conf: Ignore emulatorpin if vcpu placement is auto
authorOsier Yang <jyang@redhat.com>
Fri, 12 Oct 2012 14:44:35 +0000 (22:44 +0800)
committerOsier Yang <jyang@redhat.com>
Mon, 15 Oct 2012 04:19:54 +0000 (12:19 +0800)
When vcpu placement is "auto", the domain process will be pinned
to advisory nodeset from querying numad, While emulatorpin will
override the pinning. That means both of them are to set the
pinning policy for domain process, but conflicts with each other.

This patch ingore emulatorpin if vcpu placement is "auto", because
<vcpu> placement can't be simply ignored for <numatune> placement
could default to it.

src/conf/domain_conf.c

index e90bcc011fd8652c139dc95f9a5b1151fab0939e..cb80f09cc1633a03534e643d56c1c72770ff34f7 100644 (file)
@@ -8880,19 +8880,27 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps,
         goto error;
     }
 
+    /* Ignore emulatorpin if <vcpu> placement is "auto", they
+     * conflicts with each other, and <vcpu> placement can't be
+     * simply ignored, as <numatune>'s placement defaults to it.
+     */
     if (n) {
-        if (n > 1) {
-            virReportError(VIR_ERR_XML_ERROR, "%s",
-                           _("only one emulatorpin is supported"));
-            VIR_FREE(nodes);
-            goto error;
-        }
+        if (def->placement_mode != VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO) {
+            if (n > 1) {
+                virReportError(VIR_ERR_XML_ERROR, "%s",
+                               _("only one emulatorpin is supported"));
+                VIR_FREE(nodes);
+                goto error;
+            }
 
-        def->cputune.emulatorpin = virDomainVcpuPinDefParseXML(nodes[0], ctxt,
-                                                               def->maxvcpus, 1);
+            def->cputune.emulatorpin = virDomainVcpuPinDefParseXML(nodes[0], ctxt,
+                                                                   def->maxvcpus, 1);
 
-        if (!def->cputune.emulatorpin)
-            goto error;
+            if (!def->cputune.emulatorpin)
+                goto error;
+        } else {
+            VIR_WARN("Ignore emulatorpin for <vcpu> placement is 'auto'");
+        }
     }
     VIR_FREE(nodes);