[libvirt] [PATCHv4 12/18] conf: Refactor virDomainResctrlAppend

Wang Huaqiang huaqiang.wang at intel.com
Mon Oct 1 02:52:15 UTC 2018


Refactor virDomainResctrlAppend to facilitate virDomainResctrlDef
with the capability to hold more element.

Signed-off-by: Wang Huaqiang <huaqiang.wang at intel.com>
---
 src/conf/domain_conf.c | 64 +++++++++++++++++++++++++++++++++++---------------
 1 file changed, 45 insertions(+), 19 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index e2b4701..9a514a6 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -18920,24 +18920,43 @@ virDomainCachetuneDefParseCache(xmlXPathContextPtr ctxt,
 }
 
 
+static virDomainResctrlDefPtr
+virDomainResctrlNew(virResctrlAllocPtr alloc,
+                    virBitmapPtr vcpus)
+{
+    virDomainResctrlDefPtr resctrl = NULL;
+
+    if (VIR_ALLOC(resctrl) < 0)
+        return NULL;
+
+    if ((resctrl->vcpus = virBitmapNewCopy(vcpus)) == NULL) {
+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                       _("failed to copy 'vcpus'"));
+        goto error;
+    }
+
+    resctrl->alloc = virObjectRef(alloc);
+
+    return resctrl;
+ error:
+    virDomainResctrlDefFree(resctrl);
+    return NULL;
+}
+
+
 static int
 virDomainResctrlAppend(virDomainDefPtr def,
                        xmlNodePtr node,
-                       virResctrlAllocPtr alloc,
-                       virBitmapPtr vcpus,
+                       virDomainResctrlDefPtr resctrl,
                        unsigned int flags)
 {
     char *vcpus_str = NULL;
     char *alloc_id = NULL;
-    virDomainResctrlDefPtr tmp_resctrl = NULL;
     int ret = -1;
 
-    if (VIR_ALLOC(tmp_resctrl) < 0)
-        goto cleanup;
-
     /* We need to format it back because we need to be consistent in the naming
      * even when users specify some "sub-optimal" string there. */
-    vcpus_str = virBitmapFormat(vcpus);
+    vcpus_str = virBitmapFormat(resctrl->vcpus);
     if (!vcpus_str)
         goto cleanup;
 
@@ -18954,18 +18973,14 @@ virDomainResctrlAppend(virDomainDefPtr def,
             goto cleanup;
     }
 
-    if (virResctrlAllocSetID(alloc, alloc_id) < 0)
+    if (virResctrlAllocSetID(resctrl->alloc, alloc_id) < 0)
         goto cleanup;
 
-    tmp_resctrl->vcpus = vcpus;
-    tmp_resctrl->alloc = alloc;
-
-    if (VIR_APPEND_ELEMENT(def->resctrls, def->nresctrls, tmp_resctrl) < 0)
+    if (VIR_APPEND_ELEMENT(def->resctrls, def->nresctrls, resctrl) < 0)
         goto cleanup;
 
     ret = 0;
  cleanup:
-    virDomainResctrlDefFree(tmp_resctrl);
     VIR_FREE(alloc_id);
     VIR_FREE(vcpus_str);
     return ret;
@@ -18982,6 +18997,7 @@ virDomainCachetuneDefParse(virDomainDefPtr def,
     xmlNodePtr *nodes = NULL;
     virBitmapPtr vcpus = NULL;
     virResctrlAllocPtr alloc = NULL;
+    virDomainResctrlDefPtr resctrl = NULL;
     ssize_t i = 0;
     int n;
     int ret = -1;
@@ -19030,15 +19046,18 @@ virDomainCachetuneDefParse(virDomainDefPtr def,
         goto cleanup;
     }
 
-    if (virDomainResctrlAppend(def, node, alloc, vcpus, flags) < 0)
+    resctrl = virDomainResctrlNew(alloc, vcpus);
+    if (!resctrl)
         goto cleanup;
 
-    vcpus = NULL;
-    alloc = NULL;
+    if (virDomainResctrlAppend(def, node, resctrl, flags) < 0)
+        goto cleanup;
 
+    resctrl = NULL;
     ret = 0;
  cleanup:
     ctxt->node = oldnode;
+    virDomainResctrlDefFree(resctrl);
     virObjectUnref(alloc);
     virBitmapFree(vcpus);
     VIR_FREE(nodes);
@@ -19196,6 +19215,8 @@ virDomainMemorytuneDefParse(virDomainDefPtr def,
     xmlNodePtr *nodes = NULL;
     virBitmapPtr vcpus = NULL;
     virResctrlAllocPtr alloc = NULL;
+    virDomainResctrlDefPtr resctrl = NULL;
+
     ssize_t i = 0;
     int n;
     int ret = -1;
@@ -19240,15 +19261,20 @@ virDomainMemorytuneDefParse(virDomainDefPtr def,
      * just update the existing alloc information, which is done in above
      * virDomainMemorytuneDefParseMemory */
     if (new_alloc) {
-        if (virDomainResctrlAppend(def, node, alloc, vcpus, flags) < 0)
+        resctrl = virDomainResctrlNew(alloc, vcpus);
+        if (!resctrl)
             goto cleanup;
-        vcpus = NULL;
-        alloc = NULL;
+
+        if (virDomainResctrlAppend(def, node, resctrl, flags) < 0)
+            goto cleanup;
+
+        resctrl = NULL;
     }
 
     ret = 0;
  cleanup:
     ctxt->node = oldnode;
+    virDomainResctrlDefFree(resctrl);
     virObjectUnref(alloc);
     virBitmapFree(vcpus);
     VIR_FREE(nodes);
-- 
2.7.4




More information about the libvir-list mailing list