diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 74560a4f01..84e5fa530c 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -618,21 +618,33 @@ qemuDomainObjPrivateXMLFormat(virBufferPtr buf,
virBufferAddLit(buf, "\n");
}
+ if (priv->autoNodeset) {
+ char *nodeset = virBitmapFormat(priv->autoNodeset);
+
+ if (!nodeset)
+ return -1;
+
+ virBufferAsprintf(buf, "\n", nodeset);
+ VIR_FREE(nodeset);
+ }
+
return 0;
}
static int
qemuDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt,
virDomainObjPtr vm,
- virDomainDefParserConfigPtr config ATTRIBUTE_UNUSED)
+ virDomainDefParserConfigPtr config)
{
qemuDomainObjPrivatePtr priv = vm->privateData;
+ virQEMUDriverPtr driver = config->priv;
char *monitorpath;
char *tmp = NULL;
int n;
size_t i;
xmlNodePtr *nodes = NULL;
virQEMUCapsPtr qemuCaps = NULL;
+ virCapsPtr caps = NULL;
if (VIR_ALLOC(priv->monConfig) < 0)
goto error;
@@ -805,15 +817,33 @@ qemuDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt,
}
VIR_FREE(nodes);
+ if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
+ goto error;
+
+ if ((tmp = virXPathString("string(./numad/@nodeset)", ctxt))) {
+ if (virBitmapParse(tmp, 0, &priv->autoNodeset,
+ caps->host.nnumaCell_max) < 0)
+ goto error;
+
+ if (!(priv->autoCpuset = virCapabilitiesGetCpusForNodemask(caps,
+ priv->autoNodeset)))
+ goto error;
+ }
+ virObjectUnref(caps);
+ caps = NULL;
+ VIR_FREE(tmp);
+
return 0;
error:
virDomainChrSourceDefFree(priv->monConfig);
priv->monConfig = NULL;
VIR_FREE(nodes);
+ VIR_FREE(tmp);
virStringFreeList(priv->qemuDevices);
priv->qemuDevices = NULL;
virObjectUnref(qemuCaps);
+ virObjectUnref(caps);
return -1;
}
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
index 08923faa84..5c1c2e9b86 100644
--- a/tests/qemuxml2xmltest.c
+++ b/tests/qemuxml2xmltest.c
@@ -130,7 +130,8 @@ static const char testStatusXMLPrefix[] =
" \n"
" \n"
" \n"
-" \n";
+" \n"
+" \n";
static const char testStatusXMLSuffix[] =
"\n";
diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c
index ceaabb6a24..a2f429909a 100644
--- a/tests/testutilsqemu.c
+++ b/tests/testutilsqemu.c
@@ -336,6 +336,8 @@ virCapsPtr testQemuCapsInit(void)
caps->host.cpu = cpuDefault;
+ caps->host.nnumaCell_max = 4;
+
if ((machines = testQemuAllocMachines(&nmachines)) == NULL)
goto cleanup;