From ae37d9f1d140f11a59018d4ff996ca13ce48e05f Mon Sep 17 00:00:00 2001 From: Nikolay Shirokovskiy Date: Thu, 10 Mar 2016 15:43:47 +0300 Subject: [PATCH] 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 Signed-off-by: John Ferlan --- src/conf/domain_conf.c | 96 ++++++++++++++++++------------------------ 1 file changed, 40 insertions(+), 56 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index d5d9ff702f..f1ffdbec04 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -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);