Blob Blame History Raw
From 3eb8c8e054707378daf40b02ac6f23cf001132f7 Mon Sep 17 00:00:00 2001
Message-Id: <3eb8c8e054707378daf40b02ac6f23cf001132f7@dist-git>
From: Martin Kletzander <mkletzan@redhat.com>
Date: Thu, 15 Jan 2015 15:03:45 +0100
Subject: [PATCH] util: Add virNumaGetHostNodeset

https://bugzilla.redhat.com/show_bug.cgi?id=1161540

That function tries its best to create a bitmap of host NUMA nodes.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
(cherry picked from commit d277d61420edf73f273338dcecf32d67009875f8)
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
---
 src/libvirt_private.syms |  1 +
 src/util/virnuma.c       | 28 ++++++++++++++++++++++++++++
 src/util/virnuma.h       |  1 +
 3 files changed, 30 insertions(+)

diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 62f4f08..325a912 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -1717,6 +1717,7 @@ virNodeSuspendGetTargetMask;
 # util/virnuma.h
 virNumaGetAutoPlacementAdvice;
 virNumaGetDistances;
+virNumaGetHostNodeset;
 virNumaGetMaxNode;
 virNumaGetNodeMemory;
 virNumaGetPageInfo;
diff --git a/src/util/virnuma.c b/src/util/virnuma.c
index 1a34398..1b3280b 100644
--- a/src/util/virnuma.c
+++ b/src/util/virnuma.c
@@ -867,3 +867,31 @@ virNumaGetPages(int node ATTRIBUTE_UNUSED,
     return -1;
 }
 #endif /* #ifdef __linux__ */
+
+virBitmapPtr
+virNumaGetHostNodeset(void)
+{
+    int maxnode = virNumaGetMaxNode();
+    size_t i = 0;
+    virBitmapPtr nodeset = NULL;
+
+    if (maxnode < 0)
+        return NULL;
+
+    if (!(nodeset = virBitmapNew(maxnode + 1)))
+        return NULL;
+
+    for (i = 0; i <= maxnode; i++) {
+        if (!virNumaNodeIsAvailable(i))
+            continue;
+
+        if (virBitmapSetBit(nodeset, i) < 0) {
+            virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                           _("Problem setting bit in bitmap"));
+            virBitmapFree(nodeset);
+            return NULL;
+        }
+    }
+
+    return nodeset;
+}
diff --git a/src/util/virnuma.h b/src/util/virnuma.h
index 13ebec6..9a6031f 100644
--- a/src/util/virnuma.h
+++ b/src/util/virnuma.h
@@ -34,6 +34,7 @@ char *virNumaGetAutoPlacementAdvice(unsigned short vcups,
 int virNumaSetupMemoryPolicy(virDomainNumatunePtr numatune,
                              virBitmapPtr nodemask);
 
+virBitmapPtr virNumaGetHostNodeset(void);
 bool virNumaIsAvailable(void);
 int virNumaGetMaxNode(void);
 bool virNumaNodeIsAvailable(int node);
-- 
2.2.1