[libvirt] [PATCH 5/8] qemu: Abstract code for the cpu controller setting into a helper

Osier Yang jyang at redhat.com
Thu May 9 10:22:14 UTC 2013


---
 src/qemu/qemu_cgroup.c | 63 ++++++++++++++++++++++++++++++--------------------
 1 file changed, 38 insertions(+), 25 deletions(-)

diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c
index f384b98..0e00b47 100644
--- a/src/qemu/qemu_cgroup.c
+++ b/src/qemu/qemu_cgroup.c
@@ -629,6 +629,35 @@ cleanup:
     return ret;
 }
 
+static int
+qemuSetupCpuCgroup(virDomainObjPtr vm)
+{
+    qemuDomainObjPrivatePtr priv = vm->privateData;
+    int rc = -1;
+
+    if (!virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPU)) {
+       if (vm->def->cputune.shares) {
+           virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                          _("CPU tuning is not available on this host"));
+           return -1;
+       } else {
+           return 0;
+       }
+    }
+
+    if (vm->def->cputune.shares) {
+        rc = virCgroupSetCpuShares(priv->cgroup, vm->def->cputune.shares);
+        if (rc != 0) {
+            virReportSystemError(-rc,
+                                 _("Unable to set io cpu shares for domain %s"),
+                                 vm->def->name);
+            return -1;
+        }
+    }
+
+    return 0;
+}
+
 int qemuInitCgroup(virQEMUDriverPtr driver,
                    virDomainObjPtr vm,
                    bool startup)
@@ -742,46 +771,30 @@ int qemuSetupCgroup(virQEMUDriverPtr driver,
                     virDomainObjPtr vm,
                     virBitmapPtr nodemask)
 {
-    int rc = -1;
     qemuDomainObjPrivatePtr priv = vm->privateData;
 
     if (qemuInitCgroup(driver, vm, true) < 0)
         return -1;
 
     if (!priv->cgroup)
-        goto done;
+        return 0;
 
     if (qemuSetupDevicesCgroup(driver, vm) < 0)
-        goto cleanup;
+        return -1;
 
     if (qemuSetupBlkioCgroup(vm) < 0)
-        goto cleanup;
+        return -1;
 
     if (qemuSetupMemoryCgroup(vm) < 0)
-        goto cleanup;
-
-    if (vm->def->cputune.shares != 0) {
-        if (virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPU)) {
-            rc = virCgroupSetCpuShares(priv->cgroup, vm->def->cputune.shares);
-            if (rc != 0) {
-                virReportSystemError(-rc,
-                                     _("Unable to set io cpu shares for domain %s"),
-                                     vm->def->name);
-                goto cleanup;
-            }
-        } else {
-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                           _("CPU tuning is not available on this host"));
-        }
-    }
+        return -1;
 
     if (qemuSetupCpusetCgroup(vm, nodemask) < 0)
-        goto cleanup;
+        return -1;
 
-done:
-    rc = 0;
-cleanup:
-    return rc == 0 ? 0 : -1;
+    if (qemuSetupCpuCgroup(vm) < 0)
+        return -1;
+
+    return 0;
 }
 
 int qemuSetupCgroupVcpuBW(virCgroupPtr cgroup, unsigned long long period,
-- 
1.8.1.4




More information about the libvir-list mailing list