mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-10-27 11:34:09 +03:00
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
...
<vcpu>4</vcpu>
<cputune>
<vcpupin vcpu='3' cpuset='9-11'/>
</cputune>
...
# 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 <izumi.taku@jp.fujitsu.com>
This commit is contained in:
@@ -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++) {
|
||||
|
||||
Reference in New Issue
Block a user