From d5f3320de7303896db0937f9f2011ddbb0fc87ab Mon Sep 17 00:00:00 2001 From: Taku Izumi Date: Tue, 14 Jun 2011 11:13:11 +0800 Subject: [PATCH] vcpupin: Fix cpu affinity setting bug of qemu driver There is the case where cpu affinites for vcpu of qemu doesn't work correctly. For example, if only one vcpupin setting entry is provided and its setting is not for vcpu0, it doesn't work. # virsh dumpxml VM ... 4 ... # virsh start VM Domain VM started # virsh vcpuinfo VM VCPU: 0 CPU: 31 State: running CPU time: 2.5s CPU Affinity: yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy VCPU: 1 CPU: 12 State: running CPU time: 0.9s CPU Affinity: yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy VCPU: 2 CPU: 30 State: running CPU time: 1.5s CPU Affinity: yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy VCPU: 3 CPU: 13 State: running CPU time: 1.7s CPU Affinity: yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy This patch fixes this problem. Signed-off-by: Taku Izumi --- src/qemu/qemu_process.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 1efe024b87..887e31b3f7 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -1194,7 +1194,7 @@ qemuProcessSetVcpuAffinites(virConnectPtr conn, virNodeInfo nodeinfo; pid_t vcpupid; unsigned char *cpumask; - int vcpu, cpumaplen, hostcpus, maxcpu; + int vcpu, cpumaplen, hostcpus, maxcpu, n; unsigned char *cpumap = NULL; int ret = -1; @@ -1223,14 +1223,12 @@ qemuProcessSetVcpuAffinites(virConnectPtr conn, return -1; } - for (vcpu = 0; vcpu < def->cputune.nvcpupin; vcpu++) { - if (vcpu != def->cputune.vcpupin[vcpu]->vcpuid) - continue; - + for (n = 0; n < def->cputune.nvcpupin; n++) { int i; + vcpu = def->cputune.vcpupin[n]->vcpuid; memset(cpumap, 0, cpumaplen); - cpumask = (unsigned char *)def->cputune.vcpupin[vcpu]->cpumask; + cpumask = (unsigned char *)def->cputune.vcpupin[n]->cpumask; vcpupid = priv->vcpupids[vcpu]; for (i = 0 ; i < VIR_DOMAIN_CPUMASK_LEN ; i++) {