[libvirt] [PATCH 11/24] conf: numa: Refactor logic in virDomainNumatuneParseXML

Peter Krempa pkrempa at redhat.com
Mon Feb 16 18:51:59 UTC 2015


Shuffling around the logic will allow to simplify the code quite a bit.
As an additional bonus the change in the logic now reports an error if
automatic placement is selected and individual placement is configured.
---
 src/conf/numa_conf.c | 53 +++++++++++++++++++++-------------------------------
 1 file changed, 21 insertions(+), 32 deletions(-)

diff --git a/src/conf/numa_conf.c b/src/conf/numa_conf.c
index 18c21d5..d5ba27f 100644
--- a/src/conf/numa_conf.c
+++ b/src/conf/numa_conf.c
@@ -229,42 +229,31 @@ virDomainNumatuneParseXML(virDomainNumaPtr *numatunePtr,
         *numatunePtr = NULL;
     }

-    if (!node && placement_static) {
-        if (virDomainNumatuneNodeParseXML(numatunePtr, ncells, ctxt) < 0)
-            goto cleanup;
-        return 0;
-    }
+    if (!placement_static && !node)
+        placement = VIR_DOMAIN_NUMATUNE_PLACEMENT_AUTO;

-    if (!node) {
-        /* We know that placement_mode is "auto" if we're here */
-        ret = virDomainNumatuneSet(numatunePtr,
-                                   placement_static,
-                                   VIR_DOMAIN_NUMATUNE_PLACEMENT_AUTO,
-                                   -1,
-                                   NULL);
-        goto cleanup;
-    }
+    if (node) {
+        if ((tmp = virXMLPropString(node, "mode")) &&
+            (mode = virDomainNumatuneMemModeTypeFromString(tmp)) < 0) {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                           _("Unsupported NUMA memory tuning mode '%s'"), tmp);
+            goto cleanup;
+        }
+        VIR_FREE(tmp);

-    if ((tmp = virXMLPropString(node, "mode")) &&
-        (mode = virDomainNumatuneMemModeTypeFromString(tmp)) < 0) {
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                       _("Unsupported NUMA memory tuning mode '%s'"), tmp);
-        goto cleanup;
-    }
-    VIR_FREE(tmp);
+        if ((tmp = virXMLPropString(node, "placement")) &&
+            (placement = virDomainNumatunePlacementTypeFromString(tmp)) < 0) {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                           _("Unsupported NUMA memory placement mode '%s'"), tmp);
+            goto cleanup;
+        }
+        VIR_FREE(tmp);

-    if ((tmp = virXMLPropString(node, "placement")) &&
-        (placement = virDomainNumatunePlacementTypeFromString(tmp)) < 0) {
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                       _("Unsupported NUMA memory placement mode '%s'"), tmp);
-        goto cleanup;
+        if ((tmp = virXMLPropString(node, "nodeset")) &&
+            virBitmapParse(tmp, 0, &nodeset, VIR_DOMAIN_CPUMASK_LEN) < 0)
+            goto cleanup;
+        VIR_FREE(tmp);
     }
-    VIR_FREE(tmp);
-
-    if ((tmp = virXMLPropString(node, "nodeset")) &&
-        virBitmapParse(tmp, 0, &nodeset, VIR_DOMAIN_CPUMASK_LEN) < 0)
-        goto cleanup;
-    VIR_FREE(tmp);

     if (virDomainNumatuneSet(numatunePtr,
                              placement_static,
-- 
2.2.2




More information about the libvir-list mailing list