[libvirt] [PATCH 4/5] qemu: process: Extract gathering of 'numad' placement into a function

Peter Krempa pkrempa at redhat.com
Wed Jul 12 13:44:05 UTC 2017


Remove the code from qemuProcessPrepareDomain so that it won't get even
more bloated.
---
 src/qemu/qemu_process.c | 61 ++++++++++++++++++++++++++++++++-----------------
 1 file changed, 40 insertions(+), 21 deletions(-)

diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index e6522a294..01fe33c92 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -5410,6 +5410,44 @@ qemuProcessUpdateGuestCPU(virDomainDefPtr def,
 }


+static int
+qemuProcessPrepareDomainNUMAPlacement(virDomainObjPtr vm,
+                                      virCapsPtr caps)
+{
+    qemuDomainObjPrivatePtr priv = vm->privateData;
+    char *nodesetstr = NULL;
+    int ret = -1;
+
+    /* Get the advisory nodeset from numad if 'placement' of
+     * either <vcpu> or <numatune> is 'auto'.
+     */
+    if (!virDomainDefNeedsPlacementAdvice(vm->def))
+        return 0;
+
+    nodesetstr = virNumaGetAutoPlacementAdvice(virDomainDefGetVcpus(vm->def),
+                                               virDomainDefGetMemoryTotal(vm->def));
+
+    if (!nodesetstr)
+        goto cleanup;
+
+    VIR_DEBUG("Nodeset returned from numad: %s", nodesetstr);
+
+    if (virBitmapParse(nodesetstr, &priv->autoNodeset,
+                       VIR_DOMAIN_CPUMASK_LEN) < 0)
+        goto cleanup;
+
+    if (!(priv->autoCpuset = virCapabilitiesGetCpusForNodemask(caps,
+                                                               priv->autoNodeset)))
+        goto cleanup;
+
+    ret = 0;
+
+ cleanup:
+    VIR_FREE(nodesetstr);
+    return ret;
+}
+
+
 /**
  * qemuProcessPrepareDomain
  *
@@ -5430,7 +5468,6 @@ qemuProcessPrepareDomain(virConnectPtr conn,
 {
     int ret = -1;
     size_t i;
-    char *nodeset = NULL;
     qemuDomainObjPrivatePtr priv = vm->privateData;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
     virCapsPtr caps;
@@ -5448,25 +5485,8 @@ qemuProcessPrepareDomain(virConnectPtr conn,
         }
         virDomainAuditSecurityLabel(vm, true);

-        /* Get the advisory nodeset from numad if 'placement' of
-         * either <vcpu> or <numatune> is 'auto'.
-         */
-        if (virDomainDefNeedsPlacementAdvice(vm->def)) {
-            nodeset = virNumaGetAutoPlacementAdvice(virDomainDefGetVcpus(vm->def),
-                                                    virDomainDefGetMemoryTotal(vm->def));
-            if (!nodeset)
-                goto cleanup;
-
-            VIR_DEBUG("Nodeset returned from numad: %s", nodeset);
-
-            if (virBitmapParse(nodeset, &priv->autoNodeset,
-                               VIR_DOMAIN_CPUMASK_LEN) < 0)
-                goto cleanup;
-
-            if (!(priv->autoCpuset = virCapabilitiesGetCpusForNodemask(caps,
-                                                                       priv->autoNodeset)))
-                goto cleanup;
-        }
+        if (qemuProcessPrepareDomainNUMAPlacement(vm, caps) < 0)
+            goto cleanup;
     }

     /* Whether we should use virtlogd as stdio handler for character
@@ -5537,7 +5557,6 @@ qemuProcessPrepareDomain(virConnectPtr conn,

     ret = 0;
  cleanup:
-    VIR_FREE(nodeset);
     virObjectUnref(caps);
     virObjectUnref(cfg);
     return ret;
-- 
2.12.2




More information about the libvir-list mailing list