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 <emulatorpin> isn't
specified, but qemudDomainGetEmulatorPinInfo still reports all the
CPUs even when cpuset is specified.  This patch fixes that.
(cherry picked from commit 10c5212b10)
This commit is contained in:
Martin Kletzander 2012-10-31 15:49:08 +01:00 committed by Cole Robinson
parent c3cc4c1835
commit ec3f5cad8e

View File

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