[libvirt] [PATCH v2] nodeinfo: fix to parse present cpus rather than possible cpus

Kothapally Madhu Pavan kmp at linux.vnet.ibm.com
Tue Jun 16 09:38:20 UTC 2015


Currently we are parsing all the possible cpus to get the
nodeinfo. This fix will perform a check for present cpus
before parsing.

Signed-off-by: Kothapally Madhu Pavan <kmp at linux.vnet.ibm.com>
---
 src/nodeinfo.c |   13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/src/nodeinfo.c b/src/nodeinfo.c
index 2fafe2d..0134aba 100644
--- a/src/nodeinfo.c
+++ b/src/nodeinfo.c
@@ -57,6 +57,7 @@
 #define VIR_FROM_THIS VIR_FROM_NONE
 
 VIR_LOG_INIT("nodeinfo");
+virBitmapPtr nodeGetPresentCPUBitmap(void);
 
 #if defined(__FreeBSD__) || defined(__APPLE__)
 static int
@@ -418,6 +419,7 @@ virNodeParseNode(const char *node,
     int processors = 0;
     DIR *cpudir = NULL;
     struct dirent *cpudirent = NULL;
+    virBitmapPtr present_cpumap = NULL;
     int sock_max = 0;
     cpu_set_t sock_map;
     int sock;
@@ -438,12 +440,18 @@ virNodeParseNode(const char *node,
         goto cleanup;
     }
 
+    present_cpumap = nodeGetPresentCPUBitmap();
+
     /* enumerate sockets in the node */
     CPU_ZERO(&sock_map);
     while ((direrr = virDirRead(cpudir, &cpudirent, node)) > 0) {
         if (sscanf(cpudirent->d_name, "cpu%u", &cpu) != 1)
             continue;
 
+        if (present_cpumap)
+            if (!(virBitmapIsBitSet(present_cpumap, cpu)))
+                continue;
+
         if ((online = virNodeGetCpuValue(node, cpu, "online", 1)) < 0)
             goto cleanup;
 
@@ -477,6 +485,10 @@ virNodeParseNode(const char *node,
         if (sscanf(cpudirent->d_name, "cpu%u", &cpu) != 1)
             continue;
 
+        if (present_cpumap)
+            if (!(virBitmapIsBitSet(present_cpumap, cpu)))
+                continue;
+
         if ((online = virNodeGetCpuValue(node, cpu, "online", 1)) < 0)
             goto cleanup;
 
@@ -537,6 +549,7 @@ virNodeParseNode(const char *node,
         ret = -1;
     }
     VIR_FREE(core_maps);
+    virBitmapFree(present_cpumap);
 
     return ret;
 }




More information about the libvir-list mailing list