mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-21 20:15:17 +00:00
conf: refactor hyperv features parsing
1. All hyperv features are tristate ones. So make tristate parsing code common. 2. Reindent switch statement. 3. Reduce nesting in spinlocks parsing. Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com> Signed-off-by: John Ferlan <jferlan@redhat.com>
This commit is contained in:
parent
5b5f12cffa
commit
ae37d9f1d1
@ -15583,68 +15583,52 @@ virDomainDefParseXML(xmlDocPtr xml,
|
||||
|
||||
ctxt->node = nodes[i];
|
||||
|
||||
if (!(tmp = virXPathString("string(./@state)", ctxt))) {
|
||||
virReportError(VIR_ERR_XML_ERROR,
|
||||
_("missing 'state' attribute for "
|
||||
"HyperV Enlightenment feature '%s'"),
|
||||
nodes[i]->name);
|
||||
goto error;
|
||||
}
|
||||
|
||||
if ((value = virTristateSwitchTypeFromString(tmp)) < 0) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("invalid value of state argument "
|
||||
"for HyperV Enlightenment feature '%s'"),
|
||||
nodes[i]->name);
|
||||
goto error;
|
||||
}
|
||||
|
||||
VIR_FREE(tmp);
|
||||
def->hyperv_features[feature] = value;
|
||||
|
||||
switch ((virDomainHyperv) feature) {
|
||||
case VIR_DOMAIN_HYPERV_RELAXED:
|
||||
case VIR_DOMAIN_HYPERV_VAPIC:
|
||||
if (!(tmp = virXPathString("string(./@state)", ctxt))) {
|
||||
virReportError(VIR_ERR_XML_ERROR,
|
||||
_("missing 'state' attribute for "
|
||||
"HyperV Enlightenment feature '%s'"),
|
||||
nodes[i]->name);
|
||||
goto error;
|
||||
}
|
||||
case VIR_DOMAIN_HYPERV_RELAXED:
|
||||
case VIR_DOMAIN_HYPERV_VAPIC:
|
||||
break;
|
||||
|
||||
if ((value = virTristateSwitchTypeFromString(tmp)) < 0) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("invalid value of state argument "
|
||||
"for HyperV Enlightenment feature '%s'"),
|
||||
nodes[i]->name);
|
||||
goto error;
|
||||
}
|
||||
|
||||
VIR_FREE(tmp);
|
||||
def->hyperv_features[feature] = value;
|
||||
case VIR_DOMAIN_HYPERV_SPINLOCKS:
|
||||
if (value != VIR_TRISTATE_SWITCH_ON)
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_HYPERV_SPINLOCKS:
|
||||
if (!(tmp = virXPathString("string(./@state)", ctxt))) {
|
||||
virReportError(VIR_ERR_XML_ERROR,
|
||||
_("missing 'state' attribute for "
|
||||
"HyperV Enlightenment feature '%s'"),
|
||||
nodes[i]->name);
|
||||
goto error;
|
||||
}
|
||||
if (virXPathUInt("string(./@retries)", ctxt,
|
||||
&def->hyperv_spinlocks) < 0) {
|
||||
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
_("invalid HyperV spinlock retry count"));
|
||||
goto error;
|
||||
}
|
||||
|
||||
if ((value = virTristateSwitchTypeFromString(tmp)) < 0) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("invalid value of state argument "
|
||||
"for HyperV Enlightenment feature '%s'"),
|
||||
nodes[i]->name);
|
||||
goto error;
|
||||
}
|
||||
if (def->hyperv_spinlocks < 0xFFF) {
|
||||
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
_("HyperV spinlock retry count must be "
|
||||
"at least 4095"));
|
||||
goto error;
|
||||
}
|
||||
break;
|
||||
|
||||
VIR_FREE(tmp);
|
||||
if (value == VIR_TRISTATE_SWITCH_ON) {
|
||||
if (virXPathUInt("string(./@retries)", ctxt,
|
||||
&def->hyperv_spinlocks) < 0) {
|
||||
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
_("invalid HyperV spinlock retry count"));
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (def->hyperv_spinlocks < 0xFFF) {
|
||||
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
_("HyperV spinlock retry count must be "
|
||||
"at least 4095"));
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
def->hyperv_features[feature] = value;
|
||||
break;
|
||||
|
||||
/* coverity[dead_error_begin] */
|
||||
case VIR_DOMAIN_HYPERV_LAST:
|
||||
break;
|
||||
/* coverity[dead_error_begin] */
|
||||
case VIR_DOMAIN_HYPERV_LAST:
|
||||
break;
|
||||
}
|
||||
}
|
||||
VIR_FREE(nodes);
|
||||
|
Loading…
x
Reference in New Issue
Block a user