---
src/conf/domain_conf.c | 24 +---
src/conf/domain_conf.h |2 +-
src/lxc/lxc_controller.c | 25
src/parallels/parallels_driver.c |2 +-
src/qemu/qemu_cgroup.c |7 ++---
src/qemu/qemu_cgroup.h |2 +-
src/qemu/qemu_driver.c | 58 ++
src/qemu/qemu_process.c | 52 --
8 files changed, 65 insertions(+), 107 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 41612f2..cc54d39 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -1680,7 +1680,7 @@ void virDomainDefFree(virDomainDefPtr def)
virDomainVcpuPinDefFree(def-cputune.emulatorpin);
-VIR_FREE(def-numatune.memory.nodemask);
+virBitmapFree(def-numatune.memory.nodemask);
virSysinfoDefFree(def-sysinfo);
@@ -8523,19 +8523,10 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr
caps,
nodeset = virXMLPropString(cur, nodeset);
if (nodeset) {
-char *set = nodeset;
-int nodemasklen = VIR_DOMAIN_CPUMASK_LEN;
-
-if (VIR_ALLOC_N(def-numatune.memory.nodemask,
-nodemasklen) 0) {
-virReportOOMError();
-goto error;
-}
-
-/* nodeset uses the same syntax as cpuset. */
-if (virDomainCpuSetParse(set, 0,
- def-numatune.memory.nodemask,
- nodemasklen) 0) {
+if (virBitmapParse(nodeset,
+ 0,
+ def-numatune.memory.nodemask,
+ VIR_DOMAIN_CPUMASK_LEN) 0) {
VIR_FREE(nodeset);
goto error;
}
@@ -8577,7 +8568,7 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr
caps,
/* Ignore 'nodeset' if 'placement' is 'auto' finally */
if (placement_mode ==
VIR_DOMAIN_NUMATUNE_MEM_PLACEMENT_MODE_AUTO)
-VIR_FREE(def-numatune.memory.nodemask);
+virBitmapFree(def-numatune.memory.nodemask);
/* Copy 'placement' of numatune to vcpu if its
'placement'
* is not specified and 'placement' of numatune is
specified.
@@ -13246,8 +13237,7 @@ virDomainDefFormatInternal(virDomainDefPtr def,
if (def-numatune.memory.placement_mode ==
VIR_DOMAIN_NUMATUNE_MEM_PLACEMENT_MODE_STATIC) {
-nodemask = virDomainCpuSetFormat(def-numatune.memory.nodemask,
- VIR_DOMAIN_CPUMASK_LEN);
+nodemask = virBitmapFormat(def-numatune.memory.nodemask);
if (nodemask == NULL) {
virReportError(VIR_ERR_INTERNAL_ERROR, %s,
_(failed to format nodeset for
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index bb3721c..975c565 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -1560,7 +1560,7 @@ typedef struct _virDomainNumatuneDef virDomainNumatuneDef;
typedef virDomainNumatuneDef *virDomainNumatuneDefPtr;
struct _virDomainNumatuneDef {
struct {
-char *nodemask;
+virBitmapPtr nodemask;
int mode;
int placement_mode; /* enum virDomainNumatuneMemPlacementMode */
} memory;
diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c
index dc45a6a..44ec7aa 100644
--- a/src/lxc/lxc_controller.c
+++ b/src/lxc/lxc_controller.c
@@ -418,20 +418,19 @@ static int
virLXCControllerSetupNUMAPolicy(virLXCControllerPtr ctrl)
/* Convert nodemask to NUMA bitmask. */
nodemask_zero(mask);
-for (i = 0; i VIR_DOMAIN_CPUMASK_LEN; i++) {
-if (ctrl-def-numatune.memory.nodemask[i]) {
-if (i NUMA_NUM_NODES) {
-virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _(Host cannot support NUMA node %d), i);
-return -1;
-}
-if (i maxnode !warned) {
-VIR_WARN(nodeset is out of range, there is only %d NUMA
- nodes on host, maxnode);
-warned = true;
-}
-nodemask_set(mask, i);
+i = -1;
+while ((i = virBitmapNextSetBit(ctrl-def-numatune.memory.nodemask, i))
= 0) {
+if (i NUMA_NUM_NODES) {
+virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _(Host cannot support NUMA node %d), i);
+return -1;
+}
+if (i maxnode !warned) {
+VIR_WARN(nodeset is out of range, there is