Re: [PATCH v2 1/4] numa_conf.c: add helper functions for cpumap operations

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 6/10/20 8:35 PM, Daniel Henrique Barboza wrote:
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@xxxxxxxxx>
---
  src/conf/numa_conf.c     | 46 ++++++++++++++++++++++++++++++++++++++++
  src/conf/numa_conf.h     |  3 +++
  src/libvirt_private.syms |  1 +
  3 files changed, 50 insertions(+)

diff --git a/src/conf/numa_conf.c b/src/conf/numa_conf.c
index 09811cb51b..d022685284 100644
--- a/src/conf/numa_conf.c
+++ b/src/conf/numa_conf.c
@@ -1372,3 +1372,49 @@ virDomainNumaGetMemorySize(virDomainNumaPtr numa)
return ret;
  }
+
+
+static int
+virDomainNumaRemoveCPUsFromMap(virBitmapPtr result, virBitmapPtr exclude)
+{
+    size_t i;
+
+    for (i = 0; i < virBitmapSize(exclude); i++) {
+        if (!virBitmapIsBitSet(exclude, i))
+            continue;
+
+        if (virBitmapClearBitExpand(result, i) < 0)
+            return -1;
+    }
+
+    return 0;
+}
+

This exactly what virBitmapSubtract() does :-)

+
+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;
+
+        if (virDomainNumaRemoveCPUsFromMap(maxCPUsBitmap, nodeCpus) < 0)
+            return -1;
+    }
+
+    virBitmapFree(numa->mem_nodes[node].cpumask);
+    numa->mem_nodes[node].cpumask = g_steal_pointer(&maxCPUsBitmap);

For some weird reason, I'd feel better if the bitmap is replaced only if it differs. I can't really explain why.


Michal




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux