]> git.ipfire.org Git - thirdparty/libvirt.git/commit
qemu: Fix qemuProcessInitCpuAffinity()
authorAndrea Bolognani <abologna@redhat.com>
Thu, 30 May 2019 17:20:34 +0000 (19:20 +0200)
committerAndrea Bolognani <abologna@redhat.com>
Tue, 4 Jun 2019 07:29:35 +0000 (09:29 +0200)
commit5f2212c062c720716b7701fa0a5511311dc6e906
tree87160b7ab8645a2b490eb9adeb98fd7c84262560
parent2d2b26f96fed1e95dd4495168cee73c5c4092634
qemu: Fix qemuProcessInitCpuAffinity()

Ever since the feature was introduced with commit 0f8e7ae33ace,
it has contained a logic error in that it attempted to use a NUMA
node map where a CPU map was expected.

Because of that, guests using <numatune> might fail to start:

  # virsh start guest
  error: Failed to start domain guest
  error: cannot set CPU affinity on process 40055: Invalid argument

This was particularly easy to trigger on POWER 8 machines, where
secondary threads always show up as offline in the host: having

  <numatune>
    <memory mode='strict' placement='static' nodeset='1'/>
  </numatune>

in the guest configuration, for example, would result in libvirt
trying to set the process affinity so that it would prefer
running on CPU 1, but since that's a secondary thread and thus
shows up as offline, the operation would fail, and so would
starting the guest.

Use the newly introduced virNumaNodesetToCPUset() to convert the
NUMA node map to a CPU map, which in the example above would be
48,56,64,72,80,88 - a valid input for virProcessSetAffinity().

https://bugzilla.redhat.com/show_bug.cgi?id=1703661

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_process.c