]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: Fix EmulatorPinInfo without emulatorpin
authorMartin Kletzander <mkletzan@redhat.com>
Wed, 31 Oct 2012 14:49:08 +0000 (15:49 +0100)
committerCole Robinson <crobinso@redhat.com>
Sun, 9 Dec 2012 21:08:08 +0000 (16:08 -0500)
https://bugzilla.redhat.com/show_bug.cgi?id=871312

Recent fixes made almost all the right steps to make emulator pinned
to the cpuset of the whole domain in case <emulatorpin> isn't
specified, but qemudDomainGetEmulatorPinInfo still reports all the
CPUs even when cpuset is specified.  This patch fixes that.
(cherry picked from commit 10c5212b108e8395a6cab2dd449f2b1c0f1442d0)

src/qemu/qemu_driver.c

index c1c8fa4fef7f4719315944003d4435d470a0b6db..90ee99f4b14542e2b631d208d072374c953a31fb 100644 (file)
@@ -4144,7 +4144,6 @@ qemudDomainGetEmulatorPinInfo(virDomainPtr dom,
     virDomainDefPtr targetDef = NULL;
     int ret = -1;
     int maxcpu, hostcpus, pcpu;
-    virDomainVcpuPinDefPtr emulatorpin = NULL;
     virBitmapPtr cpumask = NULL;
     bool pinned;
 
@@ -4186,14 +4185,15 @@ qemudDomainGetEmulatorPinInfo(virDomainPtr dom,
         cpumaps[maplen - 1] &= (1 << maxcpu % 8) - 1;
     }
 
-    /* If no emulatorpin, all cpus should be used */
-    emulatorpin = targetDef->cputune.emulatorpin;
-    if (!emulatorpin) {
+    if (targetDef->cputune.emulatorpin) {
+        cpumask = targetDef->cputune.emulatorpin->cpumask;
+    } else if (targetDef->cpumask) {
+        cpumask = targetDef->cpumask;
+    } else {
         ret = 0;
         goto cleanup;
     }
 
-    cpumask = emulatorpin->cpumask;
     for (pcpu = 0; pcpu < maxcpu; pcpu++) {
         if (virBitmapGetBit(cpumask, pcpu, &pinned) < 0)
             goto cleanup;