From d277d61420edf73f273338dcecf32d67009875f8 Mon Sep 17 00:00:00 2001 From: Martin Kletzander Date: Sat, 13 Dec 2014 09:57:00 +0100 Subject: [PATCH] util: Add virNumaGetHostNodeset That function tries its best to create a bitmap of host NUMA nodes. Signed-off-by: Martin Kletzander --- 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 5cd88956a6..363d847c7d 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1750,6 +1750,7 @@ virNodeSuspendGetTargetMask; # util/virnuma.h virNumaGetAutoPlacementAdvice; virNumaGetDistances; +virNumaGetHostNodeset; virNumaGetMaxNode; virNumaGetNodeMemory; virNumaGetPageInfo; diff --git a/src/util/virnuma.c b/src/util/virnuma.c index b8d76f4074..86564d4d41 100644 --- a/src/util/virnuma.c +++ b/src/util/virnuma.c @@ -983,3 +983,31 @@ virNumaNodesetIsAvailable(virBitmapPtr nodeset) } return true; } + +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 09034a274b..1f3c0ad8a7 100644 --- a/src/util/virnuma.h +++ b/src/util/virnuma.h @@ -33,6 +33,7 @@ char *virNumaGetAutoPlacementAdvice(unsigned short vcups, int virNumaSetupMemoryPolicy(virDomainNumatuneMemMode mode, virBitmapPtr nodeset); +virBitmapPtr virNumaGetHostNodeset(void); bool virNumaNodesetIsAvailable(virBitmapPtr nodeset); bool virNumaIsAvailable(void); int virNumaGetMaxNode(void); -- GitLab