mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 05:35:25 +00:00
qemu: Keep numad hint after daemon restart
The numad hint stored in priv->autoNodeset is information that gets lost during daemon restart. And because we would like to use that information in the future, we also need to save it in the status XML. For the sake of tests, we need to initialize nnumaCell_max to some value, so that the restoration doesn't fail in our test suite. There is no need to fill in the actual numa cell data since the recalculating function virCapabilitiesGetCpusForNodemask() will not fail, it will just skip filling the data in the bitmap which we don't use in tests anyway. Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
This commit is contained in:
parent
7c8028cda9
commit
8ce86722d7
@ -618,21 +618,33 @@ qemuDomainObjPrivateXMLFormat(virBufferPtr buf,
|
||||
virBufferAddLit(buf, "</devices>\n");
|
||||
}
|
||||
|
||||
if (priv->autoNodeset) {
|
||||
char *nodeset = virBitmapFormat(priv->autoNodeset);
|
||||
|
||||
if (!nodeset)
|
||||
return -1;
|
||||
|
||||
virBufferAsprintf(buf, "<numad nodeset='%s'/>\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;
|
||||
}
|
||||
|
||||
|
@ -130,7 +130,8 @@ static const char testStatusXMLPrefix[] =
|
||||
" <device alias='serial0'/>\n"
|
||||
" <device alias='net0'/>\n"
|
||||
" <device alias='usb'/>\n"
|
||||
" </devices>\n";
|
||||
" </devices>\n"
|
||||
" <numad nodeset='0-2'/>\n";
|
||||
|
||||
static const char testStatusXMLSuffix[] =
|
||||
"</domstatus>\n";
|
||||
|
@ -336,6 +336,8 @@ virCapsPtr testQemuCapsInit(void)
|
||||
|
||||
caps->host.cpu = cpuDefault;
|
||||
|
||||
caps->host.nnumaCell_max = 4;
|
||||
|
||||
if ((machines = testQemuAllocMachines(&nmachines)) == NULL)
|
||||
goto cleanup;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user