]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu_process: fix starting VMs if machine group has limited cpuset.cpus
authorPavel Hrdina <phrdina@redhat.com>
Thu, 7 Nov 2019 21:23:04 +0000 (22:23 +0100)
committerPavel Hrdina <phrdina@redhat.com>
Mon, 18 Nov 2019 09:41:44 +0000 (10:41 +0100)
Commit <f136b83139c63f20de0df3285d9e82df2fb97bfc> reworked process
affinity setting but did not take cgroups into account which introduced
an issue when starting VM with custom cpuset.cpus for the whole machine
group.

If the machine group is limited to some pCPUs libvirt should not try to
set a VM to run on all pCPUs as it will result in permission denied when
writing to cpuset.cpus.

To fix this the affinity has to be set separately from cgroups cpuset.

Resolves: <https://bugzilla.redhat.com/show_bug.cgi?id=1746517>

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/qemu/qemu_process.c

index 246934c634325e79c0f3544099d4d967c17dd9e4..90ebdb43a056e52fd7f380ee8df0b994943e3ddb 100644 (file)
@@ -2622,6 +2622,7 @@ qemuProcessSetupPid(virDomainObjPtr vm,
     virDomainNumatuneMemMode mem_mode;
     virCgroupPtr cgroup = NULL;
     virBitmapPtr use_cpumask = NULL;
+    virBitmapPtr afinity_cpumask = NULL;
     g_autoptr(virBitmap) hostcpumap = NULL;
     char *mem_mask = NULL;
     int ret = -1;
@@ -2647,7 +2648,7 @@ qemuProcessSetupPid(virDomainObjPtr vm,
          * its config file */
         if (qemuProcessGetAllCpuAffinity(&hostcpumap) < 0)
             goto cleanup;
-        use_cpumask = hostcpumap;
+        afinity_cpumask = hostcpumap;
     }
 
     /*
@@ -2688,8 +2689,11 @@ qemuProcessSetupPid(virDomainObjPtr vm,
 
     }
 
+    if (!afinity_cpumask)
+        afinity_cpumask = use_cpumask;
+
     /* Setup legacy affinity. */
-    if (use_cpumask && virProcessSetAffinity(pid, use_cpumask) < 0)
+    if (afinity_cpumask && virProcessSetAffinity(pid, afinity_cpumask) < 0)
         goto cleanup;
 
     /* Set scheduler type and priority, but not for the main thread. */