render / rpms / libvirt

Forked from rpms/libvirt 7 months ago
Clone
Pablo Greco 40546a
From cb154a1d153edf2c399493a4336aebdccdc628f5 Mon Sep 17 00:00:00 2001
Pablo Greco 40546a
Message-Id: <cb154a1d153edf2c399493a4336aebdccdc628f5@dist-git>
Pablo Greco 40546a
From: Pavel Hrdina <phrdina@redhat.com>
Pablo Greco 40546a
Date: Mon, 1 Jul 2019 17:07:27 +0200
Pablo Greco 40546a
Subject: [PATCH] vircgroup: introduce virCgroupV2AddTask
Pablo Greco 40546a
MIME-Version: 1.0
Pablo Greco 40546a
Content-Type: text/plain; charset=UTF-8
Pablo Greco 40546a
Content-Transfer-Encoding: 8bit
Pablo Greco 40546a
Pablo Greco 40546a
In cgroups v2 we need to handle threads and processes differently.
Pablo Greco 40546a
If you need to move a process you need to write its pid into
Pablo Greco 40546a
cgrou.procs file and it will move the process with all its threads
Pablo Greco 40546a
as well.  The whole process will be moved if you use tid of any thread.
Pablo Greco 40546a
Pablo Greco 40546a
In order to move only threads at first we need to create threaded group
Pablo Greco 40546a
and after that we can write the relevant thread tids into cgroup.threads
Pablo Greco 40546a
file.  Threads can be moved only into cgroups that are children of
Pablo Greco 40546a
cgroup of its process.
Pablo Greco 40546a
Pablo Greco 40546a
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
Pablo Greco 40546a
(cherry picked from commit 48572f8825f2bbd7dabb5afb34efbf7afa2f7302)
Pablo Greco 40546a
Pablo Greco 40546a
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1689297
Pablo Greco 40546a
Pablo Greco 40546a
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
Pablo Greco 40546a
Message-Id: <d6fb582c80903fc7725e2dd15165bd167c916f04.1561993100.git.phrdina@redhat.com>
Pablo Greco 40546a
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Pablo Greco 40546a
---
Pablo Greco 40546a
 src/util/vircgroupv2.c | 15 +++++++++++++++
Pablo Greco 40546a
 1 file changed, 15 insertions(+)
Pablo Greco 40546a
Pablo Greco 40546a
diff --git a/src/util/vircgroupv2.c b/src/util/vircgroupv2.c
Pablo Greco 40546a
index b5fad47ca0..6ffb5ce786 100644
Pablo Greco 40546a
--- a/src/util/vircgroupv2.c
Pablo Greco 40546a
+++ b/src/util/vircgroupv2.c
Pablo Greco 40546a
@@ -432,6 +432,20 @@ virCgroupV2Remove(virCgroupPtr group)
Pablo Greco 40546a
 }
Pablo Greco 40546a
 
Pablo Greco 40546a
 
Pablo Greco 40546a
+static int
Pablo Greco 40546a
+virCgroupV2AddTask(virCgroupPtr group,
Pablo Greco 40546a
+                   pid_t pid,
Pablo Greco 40546a
+                   unsigned int flags)
Pablo Greco 40546a
+{
Pablo Greco 40546a
+    int controller = virCgroupV2GetAnyController(group);
Pablo Greco 40546a
+
Pablo Greco 40546a
+    if (flags & VIR_CGROUP_TASK_THREAD)
Pablo Greco 40546a
+        return virCgroupSetValueI64(group, controller, "cgroup.threads", pid);
Pablo Greco 40546a
+    else
Pablo Greco 40546a
+        return virCgroupSetValueI64(group, controller, "cgroup.procs", pid);
Pablo Greco 40546a
+}
Pablo Greco 40546a
+
Pablo Greco 40546a
+
Pablo Greco 40546a
 virCgroupBackend virCgroupV2Backend = {
Pablo Greco 40546a
     .type = VIR_CGROUP_BACKEND_TYPE_V2,
Pablo Greco 40546a
 
Pablo Greco 40546a
@@ -449,6 +463,7 @@ virCgroupBackend virCgroupV2Backend = {
Pablo Greco 40546a
     .pathOfController = virCgroupV2PathOfController,
Pablo Greco 40546a
     .makeGroup = virCgroupV2MakeGroup,
Pablo Greco 40546a
     .remove = virCgroupV2Remove,
Pablo Greco 40546a
+    .addTask = virCgroupV2AddTask,
Pablo Greco 40546a
 };
Pablo Greco 40546a
 
Pablo Greco 40546a
 
Pablo Greco 40546a
-- 
Pablo Greco 40546a
2.22.0
Pablo Greco 40546a