]> xenbits.xensource.com Git - libvirt.git/commitdiff
numa_conf.c: add helper functions for cpumap operations
authorDaniel Henrique Barboza <danielhb413@gmail.com>
Wed, 10 Jun 2020 18:35:50 +0000 (15:35 -0300)
committerMichal Privoznik <mprivozn@redhat.com>
Thu, 18 Jun 2020 10:31:54 +0000 (12:31 +0200)
These helpers will be used in an auto-fill feature for incomplete
NUMA topologies in the next patch.

Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/conf/numa_conf.c
src/conf/numa_conf.h
src/libvirt_private.syms

index 09811cb51bd22c7c3ca481236d250d70640116f1..21a8be2cacc7fd54a356b059cb912a9c29d14e05 100644 (file)
@@ -1372,3 +1372,34 @@ virDomainNumaGetMemorySize(virDomainNumaPtr numa)
 
     return ret;
 }
+
+
+int
+virDomainNumaFillCPUsInNode(virDomainNumaPtr numa,
+                            size_t node,
+                            unsigned int maxCpus)
+{
+    g_autoptr(virBitmap) maxCPUsBitmap = virBitmapNew(maxCpus);
+    size_t i;
+
+    if (node >= virDomainNumaGetNodeCount(numa))
+        return -1;
+
+    virBitmapSetAll(maxCPUsBitmap);
+
+    for (i = 0; i < numa->nmem_nodes; i++) {
+        virBitmapPtr nodeCpus = virDomainNumaGetNodeCpumask(numa, i);
+
+        if (i == node)
+            continue;
+
+        virBitmapSubtract(maxCPUsBitmap, nodeCpus);
+    }
+
+    if (!virBitmapEqual(numa->mem_nodes[node].cpumask, maxCPUsBitmap)) {
+        virBitmapFree(numa->mem_nodes[node].cpumask);
+        numa->mem_nodes[node].cpumask = g_steal_pointer(&maxCPUsBitmap);
+    }
+
+    return 0;
+}
index ae3599bb8b3184fde60a064b36a19ea8418f0049..cdf87a87e84fcaeccd9e4a0411f83577dcafe0b9 100644 (file)
@@ -185,3 +185,6 @@ int virDomainNumaDefCPUParseXML(virDomainNumaPtr def, xmlXPathContextPtr ctxt);
 int virDomainNumaDefCPUFormatXML(virBufferPtr buf, virDomainNumaPtr def);
 
 unsigned int virDomainNumaGetCPUCountTotal(virDomainNumaPtr numa);
+
+int virDomainNumaFillCPUsInNode(virDomainNumaPtr numa, size_t node,
+                                unsigned int maxCpus);
index fc7406f2b707016e76cc7d25dde578b51b749142..7509916dfd02080a2deb980dc4300850714d711c 100644 (file)
@@ -834,6 +834,7 @@ virDomainMemoryAccessTypeFromString;
 virDomainMemoryAccessTypeToString;
 virDomainNumaCheckABIStability;
 virDomainNumaEquals;
+virDomainNumaFillCPUsInNode;
 virDomainNumaFree;
 virDomainNumaGetCPUCountTotal;
 virDomainNumaGetMaxCPUID;