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

Kothapally Madhu Pavan kmp at linux.vnet.ibm.com
Fri Jun 26 22:27:29 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 |   11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/src/nodeinfo.c b/src/nodeinfo.c
index 2fafe2d..5689c9b 100644
--- a/src/nodeinfo.c
+++ b/src/nodeinfo.c
@@ -43,6 +43,7 @@
 #include "c-ctype.h"
 #include "viralloc.h"
 #include "nodeinfopriv.h"
+#include "nodeinfo.h"
 #include "physmem.h"
 #include "virerror.h"
 #include "count-one-bits.h"
@@ -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,17 @@ 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 && !(virBitmapIsSet(present_cpumap, cpu)))
+            continue;
+
         if ((online = virNodeGetCpuValue(node, cpu, "online", 1)) < 0)
             goto cleanup;
 
@@ -477,6 +484,9 @@ virNodeParseNode(const char *node,
         if (sscanf(cpudirent->d_name, "cpu%u", &cpu) != 1)
             continue;
 
+        if (present_cpumap && !(virBitmapIsSet(present_cpumap, cpu)))
+            continue;
+
         if ((online = virNodeGetCpuValue(node, cpu, "online", 1)) < 0)
             goto cleanup;
 
@@ -537,6 +547,7 @@ virNodeParseNode(const char *node,
         ret = -1;
     }
     VIR_FREE(core_maps);
+    virBitmapFree(present_cpumap);
 
     return ret;
 }




More information about the libvir-list mailing list