]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
virsh: Fix to list online cpus using virsh capabilities
authorKothapally Madhu Pavan <kmp@linux.vnet.ibm.com>
Tue, 26 May 2015 16:40:34 +0000 (12:40 -0400)
committerMichal Privoznik <mprivozn@redhat.com>
Thu, 28 May 2015 15:23:53 +0000 (17:23 +0200)
Virsh capabilities will list offline cpus as online when
libvirt is compiled with numactl option disabled. This
fix will list correct set of online cpus.

src/nodeinfo.c

index 22df95cf203f63d8a04db7a85d295b9d396c32dd..29f1aa7315f01dabfafc4d28ed61f76769d8b15e 100644 (file)
@@ -1641,26 +1641,36 @@ nodeCapsInitNUMAFake(virCapsPtr caps ATTRIBUTE_UNUSED)
     virCapsHostNUMACellCPUPtr cpus;
     int ncpus;
     int s, c, t;
-    int id;
+    int id, cid;
+    int onlinecpus ATTRIBUTE_UNUSED;
 
     if (nodeGetInfo(&nodeinfo) < 0)
         return -1;
 
     ncpus = VIR_NODEINFO_MAXCPUS(nodeinfo);
+    onlinecpus = nodeinfo.cpus;
 
     if (VIR_ALLOC_N(cpus, ncpus) < 0)
         return -1;
 
-    id = 0;
+    id = cid = 0;
     for (s = 0; s < nodeinfo.sockets; s++) {
         for (c = 0; c < nodeinfo.cores; c++) {
             for (t = 0; t < nodeinfo.threads; t++) {
-                cpus[id].id = id;
-                cpus[id].socket_id = s;
-                cpus[id].core_id = c;
-                if (!(cpus[id].siblings = virBitmapNew(ncpus)))
-                    goto error;
-                ignore_value(virBitmapSetBit(cpus[id].siblings, id));
+#ifdef __linux__
+                if (virNodeGetCpuValue(SYSFS_CPU_PATH, id, "online", 1)) {
+#endif
+                    cpus[cid].id = id;
+                    cpus[cid].socket_id = s;
+                    cpus[cid].core_id = c;
+                    if (!(cpus[cid].siblings = virBitmapNew(ncpus)))
+                        goto error;
+                    ignore_value(virBitmapSetBit(cpus[cid].siblings, id));
+                    cid++;
+#ifdef __linux__
+                }
+#endif
+
                 id++;
             }
         }
@@ -1668,7 +1678,11 @@ nodeCapsInitNUMAFake(virCapsPtr caps ATTRIBUTE_UNUSED)
 
     if (virCapabilitiesAddHostNUMACell(caps, 0,
                                        nodeinfo.memory,
+#ifdef __linux__
+                                       onlinecpus, cpus,
+#else
                                        ncpus, cpus,
+#endif
                                        0, NULL,
                                        0, NULL) < 0)
         goto error;