]> xenbits.xensource.com Git - libvirt.git/commitdiff
conf: numa: Add helper to get guest NUMA node count and refactor users
authorPeter Krempa <pkrempa@redhat.com>
Mon, 16 Feb 2015 17:11:46 +0000 (18:11 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Fri, 20 Feb 2015 16:50:07 +0000 (17:50 +0100)
Add an accessor so that a later refactor is simpler.

src/conf/domain_conf.c
src/conf/numa_conf.c
src/conf/numa_conf.h
src/libvirt_private.syms
src/qemu/qemu_command.c

index e3235bf9a2f21b6bd784689ef659ae870b6b54b3..9ebf01a4b403326d2718fda188583b51e0e74494 100644 (file)
@@ -13531,7 +13531,7 @@ virDomainDefParseXML(xmlDocPtr xml,
     if (virDomainNumatuneParseXML(def->numa,
                                   def->placement_mode ==
                                   VIR_DOMAIN_CPU_PLACEMENT_MODE_STATIC,
-                                  def->cpu ? def->cpu->ncells : 0,
+                                  virDomainNumaGetNodeCount(def->cpu),
                                   ctxt) < 0)
         goto error;
 
index 7ee2b3e694c6441279acd28f4671b2b974fe5eb0..8000415b2ed24b958eaacb6e3012ebf3138d15e8 100644 (file)
@@ -760,14 +760,15 @@ virDomainNumaDefCPUFormat(virBufferPtr buf,
 {
     virNumaMemAccess memAccess;
     char *cpustr;
+    size_t ncells = virDomainNumaGetNodeCount(def);
     size_t i;
 
-    if (def->ncells == 0)
+    if (ncells == 0)
         return 0;
 
     virBufferAddLit(buf, "<numa>\n");
     virBufferAdjustIndent(buf, 2);
-    for (i = 0; i < def->ncells; i++) {
+    for (i = 0; i < ncells; i++) {
         memAccess = def->cells[i].memAccess;
 
         if (!(cpustr = virBitmapFormat(def->cells[i].cpumask)))
@@ -813,3 +814,13 @@ virDomainNumaNew(void)
 
     return ret;
 }
+
+
+size_t
+virDomainNumaGetNodeCount(virCPUDefPtr numa)
+{
+    if (!numa)
+        return 0;
+
+    return numa->ncells;
+}
index 5fa1b9a9b4cda5a19b872fc752de2d037a47b6ce..07759ed813543e0b7d21132bd1b9ce5e0a2b3e8e 100644 (file)
@@ -86,6 +86,9 @@ int virDomainNumatuneMaybeGetNodeset(virDomainNumaPtr numatune,
                                      virBitmapPtr *retNodeset,
                                      int cellid);
 
+size_t virDomainNumaGetNodeCount(virCPUDefPtr numa)
+    ATTRIBUTE_NONNULL(1);
+
 /*
  * Formatters
  */
index b220a322d22394f6c0ab6e7aa2e654aad80f5748..924ad37f6fa075ef26b090d0986fd3c29b56dd34 100644 (file)
@@ -629,6 +629,7 @@ virNodeDeviceObjUnlock;
 # conf/numa_conf.h
 virDomainNumaEquals;
 virDomainNumaFree;
+virDomainNumaGetNodeCount;
 virDomainNumaNew;
 virDomainNumatuneFormatNodeset;
 virDomainNumatuneFormatXML;
index 74f0bd36d8211d47f6fa920e4efe05ba20e309dc..befb98279f5a097c1f181c8e80828e613cdc872b 100644 (file)
@@ -7121,7 +7121,7 @@ qemuBuildNumaArgStr(virQEMUDriverConfigPtr cfg,
     bool needBackend = false;
     int rc;
     int ret = -1;
-    size_t ncells = def->cpu->ncells;
+    size_t ncells = virDomainNumaGetNodeCount(def->cpu);
     const long system_page_size = virGetSystemPageSizeKB();
 
     if (virDomainNumatuneHasPerNodeBinding(def->numa) &&
@@ -8318,7 +8318,7 @@ qemuBuildCommandLine(virConnectPtr conn,
     virCommandAddArg(cmd, "-m");
     def->mem.max_balloon = VIR_DIV_UP(def->mem.max_balloon, 1024) * 1024;
     virCommandAddArgFormat(cmd, "%llu", def->mem.max_balloon / 1024);
-    if (def->mem.nhugepages && (!def->cpu || !def->cpu->ncells)) {
+    if (def->mem.nhugepages && !virDomainNumaGetNodeCount(def->cpu)) {
         const long system_page_size = virGetSystemPageSizeKB();
         char *mem_path = NULL;
 
@@ -8398,7 +8398,7 @@ qemuBuildCommandLine(virConnectPtr conn,
         }
     }
 
-    if (def->cpu && def->cpu->ncells)
+    if (virDomainNumaGetNodeCount(def->cpu))
         if (qemuBuildNumaArgStr(cfg, def, cmd, qemuCaps, nodeset) < 0)
             goto error;