[libvirt] [PATCH v2 2/2] qemu: Refactor bitmap handling in qemuDomainPinVcpuFlags

Peter Krempa pkrempa at redhat.com
Wed Mar 9 09:48:56 UTC 2016


Now that the function was extracted we can get rid of some temp
variables. Additionally formatting of the bitmap string for the event
code should be checked.
---
 src/qemu/qemu_driver.c | 41 +++++++++++++++++------------------------
 1 file changed, 17 insertions(+), 24 deletions(-)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 3d45ce3..e9d1d39 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -4980,6 +4980,7 @@ qemuDomainPinVcpuLive(virDomainObjPtr vm,
                       virQEMUDriverConfigPtr cfg,
                       virBitmapPtr cpumap)
 {
+    virBitmapPtr tmpmap = NULL;
     virDomainVcpuInfoPtr vcpuinfo;
     qemuDomainObjPrivatePtr priv = vm->privateData;
     virCgroupPtr cgroup_vcpu = NULL;
@@ -5004,6 +5005,12 @@ qemuDomainPinVcpuLive(virDomainObjPtr vm,
         goto cleanup;
     }

+    if (!(tmpmap = virBitmapNewCopy(cpumap)))
+        goto cleanup;
+
+    if (!(str = virBitmapFormat(cpumap)))
+        goto cleanup;
+
     if (vcpuinfo->online) {
         /* Configure the corresponding cpuset cgroup before set affinity. */
         if (virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET)) {
@@ -5019,8 +5026,8 @@ qemuDomainPinVcpuLive(virDomainObjPtr vm,
     }

     virBitmapFree(vcpuinfo->cpumask);
-    vcpuinfo->cpumask = cpumap;
-    cpumap = NULL;
+    vcpuinfo->cpumask = tmpmap;
+    tmpmap = NULL;

     if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->caps) < 0)
         goto cleanup;
@@ -5030,7 +5037,6 @@ qemuDomainPinVcpuLive(virDomainObjPtr vm,
         goto cleanup;
     }

-    str = virBitmapFormat(vcpuinfo->cpumask);
     if (virTypedParamsAddString(&eventParams, &eventNparams,
                                 &eventMaxparams, paramField, str) < 0)
         goto cleanup;
@@ -5040,7 +5046,7 @@ qemuDomainPinVcpuLive(virDomainObjPtr vm,
     ret = 0;

  cleanup:
-    virBitmapFree(cpumap);
+    virBitmapFree(tmpmap);
     virCgroupFree(&cgroup_vcpu);
     VIR_FREE(str);
     qemuDomainEventQueue(driver, event);
@@ -5062,9 +5068,7 @@ qemuDomainPinVcpuFlags(virDomainPtr dom,
     virDomainDefPtr persistentDef;
     int ret = -1;
     virBitmapPtr pcpumap = NULL;
-    virBitmapPtr pcpumaplive = NULL;
-    virBitmapPtr pcpumappersist = NULL;
-    virDomainVcpuInfoPtr vcpuinfopersist = NULL;
+    virDomainVcpuInfoPtr vcpuinfo = NULL;
     virQEMUDriverConfigPtr cfg = NULL;

     virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
@@ -5085,7 +5089,7 @@ qemuDomainPinVcpuFlags(virDomainPtr dom,
         goto endjob;

     if (persistentDef &&
-        !(vcpuinfopersist = virDomainDefGetVcpu(persistentDef, vcpu))) {
+        !(vcpuinfo = virDomainDefGetVcpu(persistentDef, vcpu))) {
         virReportError(VIR_ERR_INVALID_ARG,
                        _("vcpu %d is out of range of persistent cpu count %d"),
                        vcpu, virDomainDefGetVcpus(persistentDef));
@@ -5101,23 +5105,14 @@ qemuDomainPinVcpuFlags(virDomainPtr dom,
         goto endjob;
     }

-    if ((def && !(pcpumaplive = virBitmapNewCopy(pcpumap))) ||
-        (persistentDef && !(pcpumappersist = virBitmapNewCopy(pcpumap))))
+    if (def &&
+        qemuDomainPinVcpuLive(vm, def, vcpu, driver, cfg, pcpumap) < 0)
         goto endjob;

-    if (def) {
-        if (qemuDomainPinVcpuLive(vm, def, vcpu, driver, cfg, pcpumaplive) < 0) {
-            pcpumaplive = NULL;
-            goto endjob;
-        }
-
-        pcpumaplive = NULL;
-    }
-
     if (persistentDef) {
-        virBitmapFree(vcpuinfopersist->cpumask);
-        vcpuinfopersist->cpumask = pcpumappersist;
-        pcpumappersist = NULL;
+        virBitmapFree(vcpuinfo->cpumask);
+        vcpuinfo->cpumask = pcpumap;
+        pcpumap = NULL;

         ret = virDomainSaveConfig(cfg->configDir, driver->caps, persistentDef);
         goto endjob;
@@ -5131,8 +5126,6 @@ qemuDomainPinVcpuFlags(virDomainPtr dom,
  cleanup:
     virDomainObjEndAPI(&vm);
     virBitmapFree(pcpumap);
-    virBitmapFree(pcpumaplive);
-    virBitmapFree(pcpumappersist);
     virObjectUnref(cfg);
     return ret;
 }
-- 
2.6.2




More information about the libvir-list mailing list