]> xenbits.xensource.com Git - libvirt.git/commitdiff
numa_conf: add virDomainNumaNodesDistancesAreBeingSet() helper
authorDaniel Henrique Barboza <danielhb413@gmail.com>
Mon, 9 Dec 2019 23:15:11 +0000 (20:15 -0300)
committerCole Robinson <crobinso@redhat.com>
Mon, 16 Dec 2019 22:50:31 +0000 (17:50 -0500)
Next patch will validate QEMU_CAPS_NUMA_DIST in a new qemu_domain.c
function. The code to verify if a NUMA node distance is being
set will still be needed in qemuBuildNumaArgStr() though.

To avoid code repetition, let's put this logic in a helper to be
used in qemuBuildNumaArgStr() and in the new function.

Reviewed-by: Cole Robinson <crobinso@redhat.com>
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
src/conf/numa_conf.c
src/conf/numa_conf.h
src/libvirt_private.syms
src/qemu/qemu_command.c

index 4bc22ec7d95e362bb3f7be92065f2d35683c345d..6f1257fd8eb9f22fed304c84ed4167b8b225ac5c 100644 (file)
@@ -1188,6 +1188,25 @@ virDomainNumaNodeDistanceIsUsingDefaults(virDomainNumaPtr numa,
 }
 
 
+bool
+virDomainNumaNodesDistancesAreBeingSet(virDomainNumaPtr numa)
+{
+    size_t ncells = virDomainNumaGetNodeCount(numa);
+    size_t i, j;
+
+    for (i = 0; i < ncells; i++) {
+        for (j = 0; j < ncells; j++) {
+            if (virDomainNumaNodeDistanceIsUsingDefaults(numa, i, j))
+                continue;
+
+            return true;
+        }
+    }
+
+    return false;
+}
+
+
 size_t
 virDomainNumaGetNodeDistance(virDomainNumaPtr numa,
                              size_t node,
index e76a09c20cdc19479008e3a990289849c6b5f894..b1b8e3274d51d5b0740b1efedb1189ca67e98b1d 100644 (file)
@@ -89,6 +89,8 @@ bool virDomainNumaNodeDistanceIsUsingDefaults(virDomainNumaPtr numa,
                                               size_t node,
                                               size_t sibling)
     ATTRIBUTE_NONNULL(1);
+bool virDomainNumaNodesDistancesAreBeingSet(virDomainNumaPtr numa)
+    ATTRIBUTE_NONNULL(1);
 size_t virDomainNumaGetNodeDistance(virDomainNumaPtr numa,
                                     size_t node,
                                     size_t sibling)
index 38e2ab915bf10f9be2d6226b88337d0b5550b83b..10f8df8305a8c3053d6a39120172ae7af2ea93f7 100644 (file)
@@ -820,6 +820,7 @@ virDomainNumaGetNodeMemoryAccessMode;
 virDomainNumaGetNodeMemorySize;
 virDomainNumaNew;
 virDomainNumaNodeDistanceIsUsingDefaults;
+virDomainNumaNodesDistancesAreBeingSet;
 virDomainNumaSetNodeCount;
 virDomainNumaSetNodeCpumask;
 virDomainNumaSetNodeDistance;
index 6446fe29a6d7ca1226154987742ea64f5c625dfa..31264674205c3f8f1b2d7c19d6e76e8f80f5f1a1 100644 (file)
@@ -7448,7 +7448,6 @@ qemuBuildNumaArgStr(virQEMUDriverConfigPtr cfg,
     int ret = -1;
     size_t ncells = virDomainNumaGetNodeCount(def->numa);
     const long system_page_size = virGetSystemPageSizeKB();
-    bool numa_distances = false;
 
     if (virDomainNumatuneHasPerNodeBinding(def->numa) &&
         !(virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_RAM) ||
@@ -7542,19 +7541,7 @@ qemuBuildNumaArgStr(virQEMUDriverConfigPtr cfg,
     /* If NUMA node distance is specified for at least one pair
      * of nodes, we have to specify all the distances. Even
      * though they might be the default ones. */
-    for (i = 0; i < ncells; i++) {
-        for (j = 0; j < ncells; j++) {
-            if (virDomainNumaNodeDistanceIsUsingDefaults(def->numa, i, j))
-                continue;
-
-            numa_distances = true;
-            break;
-        }
-        if (numa_distances)
-            break;
-    }
-
-    if (numa_distances) {
+    if (virDomainNumaNodesDistancesAreBeingSet(def->numa)) {
         if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_NUMA_DIST)) {
             virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
                            _("setting NUMA distances is not "