[PATCH 08/14] qemu: Move cpuset preference evaluation into a separate function

Michal Privoznik posted 14 patches 2 years, 9 months ago
There is a newer version of this series
[PATCH 08/14] qemu: Move cpuset preference evaluation into a separate function
Posted by Michal Privoznik 2 years, 9 months ago
The set of if()-s that determines the preference in cpumask used
for setting things like emulatorpin, vcpupin, etc. is going to be
re-used. Separate it out into a function.

You may think that this changes behaviour, but
qemuProcessPrepareDomainNUMAPlacement() ensures that
priv->autoCpuset is set for VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
---
 src/qemu/qemu_domain.c  | 18 ++++++++++++++++++
 src/qemu/qemu_domain.h  |  5 +++++
 src/qemu/qemu_process.c |  9 ++-------
 3 files changed, 25 insertions(+), 7 deletions(-)

diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index aa567f652a..f99a9614e9 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -12442,3 +12442,21 @@ qemuDomainStartupCleanup(virDomainObj *vm)
     for (i = 0; i < vm->def->ndisks; i++)
         qemuDomainCleanupStorageSourceFD(vm->def->disks[i]->src);
 }
+
+
+virBitmap *
+qemuDomainEvaluateCPUMask(const virDomainDef *def,
+                          virBitmap *cpumask,
+                          virBitmap *autoCpuset)
+{
+    if (cpumask) {
+        return cpumask;
+    } else if (autoCpuset &&
+               def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO) {
+        return autoCpuset;
+    } else if (def->cpumask) {
+        return def->cpumask;
+    }
+
+    return NULL;
+}
diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
index 550397ee50..5ca5fa416c 100644
--- a/src/qemu/qemu_domain.h
+++ b/src/qemu/qemu_domain.h
@@ -1132,3 +1132,8 @@ qemuDomainSchedCoreStart(virQEMUDriverConfig *cfg,
 
 void
 qemuDomainSchedCoreStop(qemuDomainObjPrivate *priv);
+
+virBitmap *
+qemuDomainEvaluateCPUMask(const virDomainDef *def,
+                          virBitmap *cpumask,
+                          virBitmap *autoCpuset);
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 9a612ca443..2f6378b549 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -2571,13 +2571,8 @@ qemuProcessSetupPid(virDomainObj *vm,
     }
 
     /* Infer which cpumask shall be used. */
-    if (cpumask) {
-        use_cpumask = cpumask;
-    } else if (vm->def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO) {
-        use_cpumask = priv->autoCpuset;
-    } else if (vm->def->cpumask) {
-        use_cpumask = vm->def->cpumask;
-    } else {
+    if (!(use_cpumask = qemuDomainEvaluateCPUMask(vm->def,
+                                                  cpumask, priv->autoCpuset))) {
         /* You may think this is redundant, but we can't assume libvirtd
          * itself is running on all pCPUs, so we need to explicitly set
          * the spawned QEMU instance to all pCPUs if no map is given in
-- 
2.39.2
Re: [PATCH 08/14] qemu: Move cpuset preference evaluation into a separate function
Posted by Andrea Bolognani 2 years, 9 months ago
On Wed, Mar 08, 2023 at 12:14:35PM +0100, Michal Privoznik wrote:
> The set of if()-s that determines the preference in cpumask used
> for setting things like emulatorpin, vcpupin, etc. is going to be
> re-used. Separate it out into a function.
>
> You may think that this changes behaviour, but
> qemuProcessPrepareDomainNUMAPlacement() ensures that
> priv->autoCpuset is set for VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO.
>
> Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
> ---
>  src/qemu/qemu_domain.c  | 18 ++++++++++++++++++
>  src/qemu/qemu_domain.h  |  5 +++++
>  src/qemu/qemu_process.c |  9 ++-------
>  3 files changed, 25 insertions(+), 7 deletions(-)

Reviewed-by: Andrea Bolognani <abologna@redhat.com>

-- 
Andrea Bolognani / Red Hat / Virtualization