From: Martin Kletzander Date: Wed, 31 Oct 2012 14:49:08 +0000 (+0100) Subject: qemu: Fix EmulatorPinInfo without emulatorpin X-Git-Tag: v1.0.0~16 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=10c5212b108e8395a6cab2dd449f2b1c0f1442d0;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. --- diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 3980c10deb..8b5f06a896 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -4352,7 +4352,6 @@ qemudDomainGetEmulatorPinInfo(virDomainPtr dom, virDomainDefPtr targetDef = NULL; int ret = -1; int maxcpu, hostcpus, pcpu; - virDomainVcpuPinDefPtr emulatorpin = NULL; virBitmapPtr cpumask = NULL; bool pinned; @@ -4394,14 +4393,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;