conf: Factor out vcpus parsing part from virDomainCachetuneDefParse

Extract vcpus parsing part from virDomainCachetuneDefParse into one
function called virDomainResctrlParseVcpus. So that vcpus parsing logic
can be reused by other resource control technologies. Adjust error
message and use node->name so that the error message can fit to all
technologies.

Signed-off-by: Bing Niu <bing.niu@intel.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
This commit is contained in:
Bing Niu 2018-07-30 11:12:36 +08:00 committed by John Ferlan
parent acc288d655
commit 6021c3926b

View File

@ -19078,6 +19078,38 @@ virDomainDefParseBootOptions(virDomainDefPtr def,
}
static int
virDomainResctrlParseVcpus(virDomainDefPtr def,
xmlNodePtr node,
virBitmapPtr *vcpus)
{
char *vcpus_str = NULL;
int ret = -1;
vcpus_str = virXMLPropString(node, "vcpus");
if (!vcpus_str) {
virReportError(VIR_ERR_XML_ERROR, _("Missing %s attribute 'vcpus'"),
node->name);
goto cleanup;
}
if (virBitmapParse(vcpus_str, vcpus, VIR_DOMAIN_CPUMASK_LEN) < 0) {
virReportError(VIR_ERR_XML_ERROR,
_("Invalid %s attribute 'vcpus' value '%s'"),
node->name, vcpus_str);
goto cleanup;
}
/* We need to limit the bitmap to number of vCPUs. If there's nothing left,
* then we can just clean up and return 0 immediately */
virBitmapShrink(*vcpus, def->maxvcpus);
ret = 0;
cleanup:
VIR_FREE(vcpus_str);
return ret;
}
static int
virDomainCachetuneDefParseCache(xmlXPathContextPtr ctxt,
xmlNodePtr node,
@ -19178,22 +19210,8 @@ virDomainCachetuneDefParse(virDomainDefPtr def,
if (VIR_ALLOC(tmp_resctrl) < 0)
goto cleanup;
vcpus_str = virXMLPropString(node, "vcpus");
if (!vcpus_str) {
virReportError(VIR_ERR_XML_ERROR, "%s",
_("Missing cachetune attribute 'vcpus'"));
if (virDomainResctrlParseVcpus(def, node, &vcpus) < 0)
goto cleanup;
}
if (virBitmapParse(vcpus_str, &vcpus, VIR_DOMAIN_CPUMASK_LEN) < 0) {
virReportError(VIR_ERR_XML_ERROR,
_("Invalid cachetune attribute 'vcpus' value '%s'"),
vcpus_str);
goto cleanup;
}
/* We need to limit the bitmap to number of vCPUs. If there's nothing left,
* then we can just clean up and return 0 immediately */
virBitmapShrink(vcpus, def->maxvcpus);
if (virBitmapIsAllClear(vcpus)) {
ret = 0;