1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-03-07 17:28:15 +00:00

conf: Refactor virDomainVcpuPinDefParseXML

Tidy up control flow, change boolean argument to use 'bool', improve
error message in case the function is used to parse emulator pinning
info and avoid a few temp variables that made no sense.

Also when the function is called to parse emulator pinning info, there's
no need to check the processor ID in that case.
This commit is contained in:
Peter Krempa 2014-08-14 14:38:06 +02:00
parent cb8a94bfa0
commit 64bbf4c33d

View File

@ -11308,11 +11308,9 @@ virDomainPanicDefParseXML(xmlNodePtr node)
/* Parse the XML definition for a vcpupin or emulatorpin. /* Parse the XML definition for a vcpupin or emulatorpin.
* *
* vcpupin has the form of * vcpupin has the form of
*
* <vcpupin vcpu='0' cpuset='0'/> * <vcpupin vcpu='0' cpuset='0'/>
* *
* and emulatorpin has the form of * and emulatorpin has the form of
*
* <emulatorpin cpuset='0'/> * <emulatorpin cpuset='0'/>
* *
* A vcpuid of -1 is valid and only valid for emulatorpin. So callers * A vcpuid of -1 is valid and only valid for emulatorpin. So callers
@ -11322,7 +11320,7 @@ static virDomainVcpuPinDefPtr
virDomainVcpuPinDefParseXML(xmlNodePtr node, virDomainVcpuPinDefParseXML(xmlNodePtr node,
xmlXPathContextPtr ctxt, xmlXPathContextPtr ctxt,
int maxvcpus, int maxvcpus,
int emulator) bool emulator)
{ {
virDomainVcpuPinDefPtr def; virDomainVcpuPinDefPtr def;
xmlNodePtr oldnode = ctxt->node; xmlNodePtr oldnode = ctxt->node;
@ -11335,46 +11333,43 @@ virDomainVcpuPinDefParseXML(xmlNodePtr node,
ctxt->node = node; ctxt->node = node;
if (emulator == 0) { if (!emulator) {
ret = virXPathInt("string(./@vcpu)", ctxt, &vcpuid); ret = virXPathInt("string(./@vcpu)", ctxt, &vcpuid);
if ((ret == -2) || (vcpuid < -1)) { if ((ret == -2) || (vcpuid < -1)) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
"%s", _("vcpu id must be an unsigned integer or -1")); _("vcpu id must be an unsigned integer or -1"));
goto error; goto error;
} else if (vcpuid == -1) { } else if (vcpuid == -1) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
"%s", _("vcpu id value -1 is not allowed for vcpupin")); _("vcpu id value -1 is not allowed for vcpupin"));
goto error; goto error;
} }
if (vcpuid >= maxvcpus) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("vcpu id must be less than maxvcpus"));
goto error;
}
def->vcpuid = vcpuid;
} }
if (vcpuid >= maxvcpus) { if (!(tmp = virXMLPropString(node, "cpuset"))) {
virReportError(VIR_ERR_INTERNAL_ERROR, if (emulator)
"%s", _("vcpu id must be less than maxvcpus")); virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("missing cpuset for emulatorpin"));
else
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("missing cpuset for vcpupin"));
goto error; goto error;
} }
def->vcpuid = vcpuid; if (virBitmapParse(tmp, 0, &def->cpumask, VIR_DOMAIN_CPUMASK_LEN) < 0)
tmp = virXMLPropString(node, "cpuset");
if (tmp) {
char *set = tmp;
int cpumasklen = VIR_DOMAIN_CPUMASK_LEN;
if (virBitmapParse(set, 0, &def->cpumask,
cpumasklen) < 0) {
VIR_FREE(tmp);
goto error;
}
VIR_FREE(tmp);
} else {
virReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("missing cpuset for vcpupin"));
goto error; goto error;
}
cleanup: cleanup:
VIR_FREE(tmp);
ctxt->node = oldnode; ctxt->node = oldnode;
return def; return def;
@ -11995,7 +11990,8 @@ virDomainDefParseXML(xmlDocPtr xml,
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
virDomainVcpuPinDefPtr vcpupin = NULL; virDomainVcpuPinDefPtr vcpupin = NULL;
vcpupin = virDomainVcpuPinDefParseXML(nodes[i], ctxt, def->maxvcpus, 0); vcpupin = virDomainVcpuPinDefParseXML(nodes[i], ctxt,
def->maxvcpus, false);
if (!vcpupin) if (!vcpupin)
goto error; goto error;
@ -12069,7 +12065,7 @@ virDomainDefParseXML(xmlDocPtr xml,
} }
def->cputune.emulatorpin = virDomainVcpuPinDefParseXML(nodes[0], ctxt, def->cputune.emulatorpin = virDomainVcpuPinDefParseXML(nodes[0], ctxt,
def->maxvcpus, 1); 0, true);
if (!def->cputune.emulatorpin) if (!def->cputune.emulatorpin)
goto error; goto error;