[PATCH 1/3] qemu: qemuDomainHotplugVcpus - separate out the add cgroup

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Future IOThread setting patches would copy the code anyway, so create
and generalize the add the vcpu to a cgroup into its own API.

Signed-off-by: John Ferlan <jferlan@xxxxxxxxxx>
---
 src/qemu/qemu_driver.c | 69 +++++++++++++++++++++++++++++++++++---------------
 1 file changed, 48 insertions(+), 21 deletions(-)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 6132674..fa880b7 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -4635,9 +4635,49 @@ static void qemuProcessEventHandler(void *data, void *opaque)
     VIR_FREE(processEvent);
 }
 
-static int qemuDomainHotplugVcpus(virQEMUDriverPtr driver,
-                                  virDomainObjPtr vm,
-                                  unsigned int nvcpus)
+typedef int cgroupNewFunc(virCgroupPtr domain,
+                          int id,
+                          bool create,
+                          virCgroupPtr *group);
+
+static virCgroupPtr
+qemuDomainHotplugAddCgroup(virCgroupPtr cgroup,
+                           cgroupNewFunc func,
+                           int index,
+                           char *mem_mask,
+                           pid_t pid)
+{
+    virCgroupPtr new_cgroup = NULL;
+    int rv = -1;
+
+    /* Create cgroup */
+    if (func(cgroup, index, true, &new_cgroup) < 0)
+        return NULL;
+
+    if (mem_mask && virCgroupSetCpusetMems(new_cgroup, mem_mask) < 0)
+        goto error;
+
+    /* Add pid/thread to the cgroup */
+    rv = virCgroupAddTask(new_cgroup, pid);
+    if (rv < 0) {
+        virReportSystemError(-rv,
+                             _("unable to add id %d task %d to cgroup"),
+                             index, pid);
+        virCgroupRemove(new_cgroup);
+        goto error;
+    }
+
+    return new_cgroup;
+
+ error:
+    virCgroupFree(&new_cgroup);
+    return NULL;
+}
+
+static int
+qemuDomainHotplugVcpus(virQEMUDriverPtr driver,
+                       virDomainObjPtr vm,
+                       unsigned int nvcpus)
 {
     qemuDomainObjPrivatePtr priv = vm->privateData;
     size_t i;
@@ -4726,25 +4766,12 @@ static int qemuDomainHotplugVcpus(virQEMUDriverPtr driver,
     if (nvcpus > oldvcpus) {
         for (i = oldvcpus; i < nvcpus; i++) {
             if (priv->cgroup) {
-                int rv = -1;
-                /* Create cgroup for the onlined vcpu */
-                if (virCgroupNewVcpu(priv->cgroup, i, true, &cgroup_vcpu) < 0)
+                cgroup_vcpu = qemuDomainHotplugAddCgroup(priv->cgroup,
+                                                         virCgroupNewVcpu,
+                                                         i, mem_mask,
+                                                         cpupids[i]);
+                if (!cgroup_vcpu)
                     goto cleanup;
-
-                if (mem_mask &&
-                    virCgroupSetCpusetMems(cgroup_vcpu, mem_mask) < 0)
-                    goto cleanup;
-
-                /* Add vcpu thread to the cgroup */
-                rv = virCgroupAddTask(cgroup_vcpu, cpupids[i]);
-                if (rv < 0) {
-                    virReportSystemError(-rv,
-                                         _("unable to add vcpu %zu task %d to cgroup"),
-                                         i, cpupids[i]);
-                    virCgroupRemove(cgroup_vcpu);
-                    goto cleanup;
-                }
-
             }
 
             /* Inherit def->cpuset */
-- 
2.1.0

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]