[PATCH v2 16/53] [ACKED] vircgroup: introduce virCgroupV2AddTask

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

 



In cgroups v2 we need to handle threads and processes differently.
If you need to move a process you need to write its pid into
cgrou.procs file and it will move the process with all its threads
as well.  The whole process will be moved if you use tid of any thread.

In order to move only threads at first we need to create threaded group
and after that we can write the relevant thread tids into cgroup.threads
file.  Threads can be moved only into cgroups that are children of
cgroup of its process.

Signed-off-by: Pavel Hrdina <phrdina@xxxxxxxxxx>
---
 src/util/vircgroupv2.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/src/util/vircgroupv2.c b/src/util/vircgroupv2.c
index dcfc735a84..3e8238ba1d 100644
--- a/src/util/vircgroupv2.c
+++ b/src/util/vircgroupv2.c
@@ -440,6 +440,20 @@ virCgroupV2Remove(virCgroupPtr group)
 }
 
 
+static int
+virCgroupV2AddTask(virCgroupPtr group,
+                   pid_t pid,
+                   unsigned int flags)
+{
+    int controller = virCgroupV2GetAnyController(group);
+
+    if (flags & VIR_CGROUP_TASK_THREAD)
+        return virCgroupSetValueI64(group, controller, "cgroup.threads", pid);
+    else
+        return virCgroupSetValueI64(group, controller, "cgroup.procs", pid);
+}
+
+
 virCgroupBackend virCgroupV2Backend = {
     .type = VIR_CGROUP_BACKEND_TYPE_V2,
 
@@ -457,6 +471,7 @@ virCgroupBackend virCgroupV2Backend = {
     .pathOfController = virCgroupV2PathOfController,
     .makeGroup = virCgroupV2MakeGroup,
     .remove = virCgroupV2Remove,
+    .addTask = virCgroupV2AddTask,
 };
 
 
-- 
2.17.1

--
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]

  Powered by Linux