Blame SOURCES/libvirt-qemu_process-fix-starting-VMs-if-machine-group-has-limited-cpuset.cpus.patch

d759b5
From ba8699bf038f3fe588cc0e40bf484260c08e6f48 Mon Sep 17 00:00:00 2001
d759b5
Message-Id: <ba8699bf038f3fe588cc0e40bf484260c08e6f48@dist-git>
d759b5
From: Pavel Hrdina <phrdina@redhat.com>
d759b5
Date: Mon, 25 Nov 2019 11:02:21 +0100
d759b5
Subject: [PATCH] qemu_process: fix starting VMs if machine group has limited
d759b5
 cpuset.cpus
d759b5
d759b5
Commit <f136b83139c63f20de0df3285d9e82df2fb97bfc> reworked process
d759b5
affinity setting but did not take cgroups into account which introduced
d759b5
an issue when starting VM with custom cpuset.cpus for the whole machine
d759b5
group.
d759b5
d759b5
If the machine group is limited to some pCPUs libvirt should not try to
d759b5
set a VM to run on all pCPUs as it will result in permission denied when
d759b5
writing to cpuset.cpus.
d759b5
d759b5
To fix this the affinity has to be set separately from cgroups cpuset.
d759b5
d759b5
Resolves: <https://bugzilla.redhat.com/show_bug.cgi?id=1746517>
d759b5
d759b5
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
d759b5
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
d759b5
(cherry picked from commit 4c0398b5284d14c55eca51095673b6fadbbd85fb)
d759b5
d759b5
Conflicts:
d759b5
    src/qemu/qemu_process.c - upstream commit that introduced this
d759b5
            issue was modified to not use VIR_AUTOFREE
d759b5
d759b5
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
d759b5
Message-Id: <86eec31e53a4d061e098919d145e6a89cc8740c4.1574676123.git.phrdina@redhat.com>
d759b5
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
d759b5
---
d759b5
 src/qemu/qemu_process.c | 8 ++++++--
d759b5
 1 file changed, 6 insertions(+), 2 deletions(-)
d759b5
d759b5
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
d759b5
index 307098cd63..4a2864af27 100644
d759b5
--- a/src/qemu/qemu_process.c
d759b5
+++ b/src/qemu/qemu_process.c
d759b5
@@ -2476,6 +2476,7 @@ qemuProcessSetupPid(virDomainObjPtr vm,
d759b5
     virDomainNumatuneMemMode mem_mode;
d759b5
     virCgroupPtr cgroup = NULL;
d759b5
     virBitmapPtr use_cpumask = NULL;
d759b5
+    virBitmapPtr afinity_cpumask = NULL;
d759b5
     virBitmapPtr hostcpumap = NULL;
d759b5
     char *mem_mask = NULL;
d759b5
     int ret = -1;
d759b5
@@ -2501,7 +2502,7 @@ qemuProcessSetupPid(virDomainObjPtr vm,
d759b5
          * its config file */
d759b5
         if (qemuProcessGetAllCpuAffinity(&hostcpumap) < 0)
d759b5
             goto cleanup;
d759b5
-        use_cpumask = hostcpumap;
d759b5
+        afinity_cpumask = hostcpumap;
d759b5
     }
d759b5
 
d759b5
     /*
d759b5
@@ -2542,8 +2543,11 @@ qemuProcessSetupPid(virDomainObjPtr vm,
d759b5
 
d759b5
     }
d759b5
 
d759b5
+    if (!afinity_cpumask)
d759b5
+        afinity_cpumask = use_cpumask;
d759b5
+
d759b5
     /* Setup legacy affinity. */
d759b5
-    if (use_cpumask && virProcessSetAffinity(pid, use_cpumask) < 0)
d759b5
+    if (afinity_cpumask && virProcessSetAffinity(pid, afinity_cpumask) < 0)
d759b5
         goto cleanup;
d759b5
 
d759b5
     /* Set scheduler type and priority. */
d759b5
-- 
d759b5
2.24.0
d759b5