Blame SOURCES/libvirt-qemu-Move-cpuset-preference-evaluation-into-a-separate-function.patch

e8e641
From e917c5aa46ccffb608dad2068861e555b60e10fa Mon Sep 17 00:00:00 2001
e8e641
Message-Id: <e917c5aa46ccffb608dad2068861e555b60e10fa@dist-git>
e8e641
From: Michal Privoznik <mprivozn@redhat.com>
e8e641
Date: Tue, 7 Mar 2023 12:27:05 +0100
e8e641
Subject: [PATCH] qemu: Move cpuset preference evaluation into a separate
e8e641
 function
e8e641
e8e641
The set of if()-s that determines the preference in cpumask used
e8e641
for setting things like emulatorpin, vcpupin, etc. is going to be
e8e641
re-used. Separate it out into a function.
e8e641
e8e641
You may think that this changes behaviour, but
e8e641
qemuProcessPrepareDomainNUMAPlacement() ensures that
e8e641
priv->autoCpuset is set for VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO.
e8e641
e8e641
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
e8e641
Reviewed-by: Kristina Hanicova <khanicov@redhat.com>
e8e641
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
e8e641
(cherry picked from commit b4ccb0dc412bcdb09863b2fa1ee65d09808a2c08)
e8e641
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2185039
e8e641
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
e8e641
---
e8e641
 src/qemu/qemu_domain.c  | 18 ++++++++++++++++++
e8e641
 src/qemu/qemu_domain.h  |  5 +++++
e8e641
 src/qemu/qemu_process.c |  9 ++-------
e8e641
 3 files changed, 25 insertions(+), 7 deletions(-)
e8e641
e8e641
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
e8e641
index 374b881146..443b6442ca 100644
e8e641
--- a/src/qemu/qemu_domain.c
e8e641
+++ b/src/qemu/qemu_domain.c
e8e641
@@ -12335,3 +12335,21 @@ qemuDomainStartupCleanup(virDomainObj *vm)
e8e641
     for (i = 0; i < vm->def->ndisks; i++)
e8e641
         qemuDomainCleanupStorageSourceFD(vm->def->disks[i]->src);
e8e641
 }
e8e641
+
e8e641
+
e8e641
+virBitmap *
e8e641
+qemuDomainEvaluateCPUMask(const virDomainDef *def,
e8e641
+                          virBitmap *cpumask,
e8e641
+                          virBitmap *autoCpuset)
e8e641
+{
e8e641
+    if (cpumask) {
e8e641
+        return cpumask;
e8e641
+    } else if (autoCpuset &&
e8e641
+               def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO) {
e8e641
+        return autoCpuset;
e8e641
+    } else if (def->cpumask) {
e8e641
+        return def->cpumask;
e8e641
+    }
e8e641
+
e8e641
+    return NULL;
e8e641
+}
e8e641
diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
e8e641
index fb9ab4c5ed..b01b394287 100644
e8e641
--- a/src/qemu/qemu_domain.h
e8e641
+++ b/src/qemu/qemu_domain.h
e8e641
@@ -1139,3 +1139,8 @@ qemuDomainSchedCoreStart(virQEMUDriverConfig *cfg,
e8e641
 
e8e641
 void
e8e641
 qemuDomainSchedCoreStop(qemuDomainObjPrivate *priv);
e8e641
+
e8e641
+virBitmap *
e8e641
+qemuDomainEvaluateCPUMask(const virDomainDef *def,
e8e641
+                          virBitmap *cpumask,
e8e641
+                          virBitmap *autoCpuset);
e8e641
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
e8e641
index e5c438aa26..3154fa5b10 100644
e8e641
--- a/src/qemu/qemu_process.c
e8e641
+++ b/src/qemu/qemu_process.c
e8e641
@@ -2575,13 +2575,8 @@ qemuProcessSetupPid(virDomainObj *vm,
e8e641
     }
e8e641
 
e8e641
     /* Infer which cpumask shall be used. */
e8e641
-    if (cpumask) {
e8e641
-        use_cpumask = cpumask;
e8e641
-    } else if (vm->def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO) {
e8e641
-        use_cpumask = priv->autoCpuset;
e8e641
-    } else if (vm->def->cpumask) {
e8e641
-        use_cpumask = vm->def->cpumask;
e8e641
-    } else {
e8e641
+    if (!(use_cpumask = qemuDomainEvaluateCPUMask(vm->def,
e8e641
+                                                  cpumask, priv->autoCpuset))) {
e8e641
         /* You may think this is redundant, but we can't assume libvirtd
e8e641
          * itself is running on all pCPUs, so we need to explicitly set
e8e641
          * the spawned QEMU instance to all pCPUs if no map is given in
e8e641
-- 
e8e641
2.40.0