]> xenbits.xensource.com Git - libvirt.git/commitdiff
nodeinfo: Don't fail on non-contiguous NUMA topologies
authorhejia hejia <jiakernel@gmail.com>
Mon, 8 Jul 2013 14:03:05 +0000 (22:03 +0800)
committerPeter Krempa <pkrempa@redhat.com>
Fri, 12 Jul 2013 07:11:36 +0000 (09:11 +0200)
nodeGetFreeMemory and nodeGetCellsFreeMemory assumed that the NUMA nodes
are contiguous and starting from 0. Unfortunately there are machines
that don't match this assumption:

available: 1 nodes (1)
node 1 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
node 1 size: 16340 MB
node 1 free: 11065 MB

Before this patch:
error: internal error Failed to query NUMA free memory
error: internal error Failed to query NUMA free memory for node: 0

After this patch:
Total: 15772580 KiB
0: 0 KiB

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
src/nodeinfo.c

index a2a2f73c0988b5290ff9c47047072e442f235a4b..4df48515bf2be663d70c57a7954923361937f244 100644 (file)
@@ -1686,12 +1686,9 @@ nodeGetCellsFreeMemory(unsigned long long *freeMems,
 
     for (numCells = 0, n = startCell; n <= lastCell; n++) {
         long long mem;
-        if (numa_node_size64(n, &mem) < 0) {
-            virReportError(VIR_ERR_INTERNAL_ERROR,
-                           _("Failed to query NUMA free memory for node: %d"),
-                           n);
-            goto cleanup;
-        }
+        if (numa_node_size64(n, &mem) < 0)
+            mem = 0;
+
         freeMems[numCells++] = mem;
     }
     ret = numCells;
@@ -1712,15 +1709,12 @@ nodeGetFreeMemory(void)
 
     for (n = 0; n <= numa_max_node(); n++) {
         long long mem;
-        if (numa_node_size64(n, &mem) < 0) {
-            virReportError(VIR_ERR_INTERNAL_ERROR,
-                           "%s", _("Failed to query NUMA free memory"));
-            goto cleanup;
-        }
+        if (numa_node_size64(n, &mem) < 0)
+            continue;
+
         freeMem += mem;
     }
 
-cleanup:
     return freeMem;
 }