From: Bing Niu <bing.niu(a)intel.com>
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(a)intel.com>
---
src/conf/domain_conf.c | 48 +++++++++++++++++++++++++++++++++---------------
1 file changed, 33 insertions(+), 15 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index c1527b2..d6314de 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -18951,6 +18951,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'"),
+ vcpus_str, node->name);
+ 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,
virResctrlAllocPtr alloc)
@@ -19050,22 +19082,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'"));
- 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);
+ if (virDomainResctrlParseVcpus(def, node, &vcpus) < 0)
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;
--
2.7.4