From: Martin Kletzander Date: Wed, 31 Oct 2012 14:49:08 +0000 (+0100) Subject: qemu: Fix EmulatorPinInfo without emulatorpin X-Git-Tag: v0.10.2.2~58 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ec3f5cad8e6ca15bd1cdff6518109a1c751544b4;p=thirdparty%2Flibvirt.git qemu: Fix EmulatorPinInfo without emulatorpin 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 isn't specified, but qemudDomainGetEmulatorPinInfo still reports all the CPUs even when cpuset is specified. This patch fixes that. (cherry picked from commit 10c5212b108e8395a6cab2dd449f2b1c0f1442d0) --- diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index c1c8fa4fef..90ee99f4b1 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -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;