[libvirt] [PATCH 23/24] conf: numa: Add setter/getter for NUMA node memory size

Peter Krempa pkrempa at redhat.com
Mon Feb 16 18:52:11 UTC 2015


Add the helpers and refactor places where the value is accessed without
them.
---
 src/conf/numa_conf.c     | 20 +++++++++++++++++++-
 src/conf/numa_conf.h     |  7 +++++++
 src/libvirt_private.syms |  2 ++
 src/qemu/qemu_command.c  | 10 ++++++----
 4 files changed, 34 insertions(+), 5 deletions(-)

diff --git a/src/conf/numa_conf.c b/src/conf/numa_conf.c
index 4906687..ee7e65d 100644
--- a/src/conf/numa_conf.c
+++ b/src/conf/numa_conf.c
@@ -777,7 +777,8 @@ virDomainNumaDefCPUFormat(virBufferPtr buf,
         virBufferAddLit(buf, "<cell");
         virBufferAsprintf(buf, " id='%zu'", i);
         virBufferAsprintf(buf, " cpus='%s'", cpustr);
-        virBufferAsprintf(buf, " memory='%llu'", def->cells[i].mem);
+        virBufferAsprintf(buf, " memory='%llu'",
+                          virDomainNumaGetNodeMemorySize(def, i));
         virBufferAddLit(buf, " unit='KiB'");
         if (memAccess)
             virBufferAsprintf(buf, " memAccess='%s'",
@@ -840,3 +841,20 @@ virDomainNumaGetNodeMemoryAccessMode(virCPUDefPtr numa,
 {
     return numa->cells[node].memAccess;
 }
+
+
+unsigned long long
+virDomainNumaGetNodeMemorySize(virCPUDefPtr numa,
+                               size_t node)
+{
+    return numa->cells[node].mem;
+}
+
+
+void
+virDomainNumaSetNodeMemorySize(virCPUDefPtr numa,
+                               size_t node,
+                               unsigned long long size)
+{
+    numa->cells[node].mem = size;
+}
diff --git a/src/conf/numa_conf.h b/src/conf/numa_conf.h
index 0ea2c93..eadab43 100644
--- a/src/conf/numa_conf.h
+++ b/src/conf/numa_conf.h
@@ -91,6 +91,9 @@ virBitmapPtr virDomainNumaGetNodeCpumask(virCPUDefPtr numa,
                                          size_t node);
 virNumaMemAccess virDomainNumaGetNodeMemoryAccessMode(virCPUDefPtr numa,
                                                       size_t node);
+unsigned long long virDomainNumaGetNodeMemorySize(virCPUDefPtr numa,
+                                                  size_t node);
+

 /*
  * Formatters
@@ -114,6 +117,10 @@ int virDomainNumatuneSet(virDomainNumaPtr numa,
                          virBitmapPtr nodeset)
     ATTRIBUTE_NONNULL(1);

+void virDomainNumaSetNodeMemorySize(virCPUDefPtr numa,
+                                    size_t node,
+                                    unsigned long long size);
+
 /*
  * Other accessors
  */
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 1f1ce14..8988b61 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -632,7 +632,9 @@ virDomainNumaFree;
 virDomainNumaGetNodeCount;
 virDomainNumaGetNodeCpumask;
 virDomainNumaGetNodeMemoryAccessMode;
+virDomainNumaGetNodeMemorySize;
 virDomainNumaNew;
+virDomainNumaSetNodeMemorySize;
 virDomainNumatuneFormatNodeset;
 virDomainNumatuneFormatXML;
 virDomainNumatuneGetMode;
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 05545ee..a69d004 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -4745,7 +4745,8 @@ qemuBuildMemoryCellBackendStr(virDomainDefPtr def,
     if (virAsprintf(&alias, "ram-node%zu", cell) < 0)
         goto cleanup;

-    if ((rc = qemuBuildMemoryBackendStr(def->cpu->cells[cell].mem, 0, cell,
+    if ((rc = qemuBuildMemoryBackendStr(virDomainNumaGetNodeMemorySize(def->cpu, cell),
+                                        0, cell,
                                         NULL, auto_nodeset,
                                         def, qemuCaps, cfg,
                                         &backendType, &props, false)) < 0)
@@ -7173,8 +7174,8 @@ qemuBuildNumaArgStr(virQEMUDriverConfigPtr cfg,
     /* using of -numa memdev= cannot be combined with -numa mem=, thus we
      * need to check which approach to use */
     for (i = 0; i < ncells; i++) {
-        unsigned long long cellmem = VIR_DIV_UP(def->cpu->cells[i].mem, 1024);
-        def->cpu->cells[i].mem = cellmem * 1024;
+        unsigned long long cellmem = virDomainNumaGetNodeMemorySize(def->cpu, i);
+        virDomainNumaSetNodeMemorySize(def->cpu, i, VIR_ROUND_UP(cellmem, 1024));

         if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_RAM) ||
             virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_FILE)) {
@@ -7224,7 +7225,8 @@ qemuBuildNumaArgStr(virQEMUDriverConfigPtr cfg,
         if (needBackend)
             virBufferAsprintf(&buf, ",memdev=ram-node%zu", i);
         else
-            virBufferAsprintf(&buf, ",mem=%llu", def->cpu->cells[i].mem / 1024);
+            virBufferAsprintf(&buf, ",mem=%llu",
+                              virDomainNumaGetNodeMemorySize(def->cpu, i) / 1024);

         virCommandAddArgBuffer(cmd, &buf);
     }
-- 
2.2.2




More information about the libvir-list mailing list