]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: process: Fix start with unpluggable vcpus with NUMA pinning
authorPeter Krempa <pkrempa@redhat.com>
Wed, 7 Sep 2016 11:20:00 +0000 (13:20 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Wed, 7 Sep 2016 14:05:01 +0000 (16:05 +0200)
Similarly to vcpu hotplug the emulator thread cgroup numa mapping needs
to be relaxed while hot-adding vcpus so that the threads can allocate
data in the DMA zone.

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

src/qemu/qemu_process.c

index ec6b547c85518e9321d1bbffc48fe2d90d491de8..e6e91dffd8788f3edc1dfed4f7ee8accc7255d88 100644 (file)
@@ -4864,6 +4864,8 @@ qemuProcessSetupHotpluggableVcpus(virQEMUDriverPtr driver,
                                   qemuDomainAsyncJob asyncJob)
 {
     unsigned int maxvcpus = virDomainDefGetVcpusMax(vm->def);
+    qemuDomainObjPrivatePtr priv = vm->privateData;
+    qemuCgroupEmulatorAllNodesDataPtr emulatorCgroup = NULL;
     virDomainVcpuDefPtr vcpu;
     qemuDomainVcpuPrivatePtr vcpupriv;
     virJSONValuePtr vcpuprops = NULL;
@@ -4896,6 +4898,9 @@ qemuProcessSetupHotpluggableVcpus(virQEMUDriverPtr driver,
     qsort(bootHotplug, nbootHotplug, sizeof(*bootHotplug),
           qemuProcessVcpusSortOrder);
 
+    if (qemuCgroupEmulatorAllNodesAllow(priv->cgroup, &emulatorCgroup) < 0)
+        goto cleanup;
+
     for (i = 0; i < nbootHotplug; i++) {
         vcpu = bootHotplug[i];
 
@@ -4920,6 +4925,7 @@ qemuProcessSetupHotpluggableVcpus(virQEMUDriverPtr driver,
     ret = 0;
 
  cleanup:
+    qemuCgrouEmulatorAllNodesRestore(emulatorCgroup);
     VIR_FREE(bootHotplug);
     virJSONValueFree(vcpuprops);
     return ret;