
On Thu, 25 Feb 2016 17:53:07 -0500 John Ferlan <jferlan@redhat.com> wrote:
On 02/23/2016 10:58 AM, Henning Schild wrote:
When using a cgroups hierarchy threads have child cgroups for certain controllers. Introduce an enum for later reuse.
Signed-off-by: Henning Schild <henning.schild@siemens.com> --- src/util/vircgroup.c | 12 +++--------- src/util/vircgroup.h | 7 +++++++ 2 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c index ad46dfc..11f33ab 100644 --- a/src/util/vircgroup.c +++ b/src/util/vircgroup.c @@ -277,9 +277,7 @@ virCgroupValidateMachineGroup(virCgroupPtr group, goto cleanup;
if (stripEmulatorSuffix && - (i == VIR_CGROUP_CONTROLLER_CPU || - i == VIR_CGROUP_CONTROLLER_CPUACCT || - i == VIR_CGROUP_CONTROLLER_CPUSET)) { + (i & VIR_CGROUP_THREAD_CONTROLLER_MASK)) {
Not sure this works as expected because 'i' is not a mask - it's just an int... On entry, VIR_CGROUP_THREAD_CONTROLLER_MASK is 7...
The loop goes from 0 to VIR_CGROUP_CONTROLLER_LAST (11).
If you logically go through the values of 'i':
0 & 7 1 & 7 2 & 7 3 & 7 4 & 7 ... etc
You'd find 0 & 8 fail, but 1 -> 7, 9, & 10 succeed
So what "would" work is :
mask = (1 << i); if (stripEmulatorSuffix && mask & VIR_CGROUP_THREAD_CONTROLLER_MASK))
Sure, Stupid mistake, will fix.
John
if (STREQ(tmp, "/emulator")) *tmp = '\0'; tmp = strrchr(group->controllers[i].placement, '/'); @@ -1518,7 +1516,6 @@ virCgroupNewThread(virCgroupPtr domain, { int ret = -1; char *name = NULL; - int controllers;
switch (nameval) { case VIR_CGROUP_THREAD_VCPU: @@ -1539,11 +1536,8 @@ virCgroupNewThread(virCgroupPtr domain, goto cleanup; }
- controllers = ((1 << VIR_CGROUP_CONTROLLER_CPU) | - (1 << VIR_CGROUP_CONTROLLER_CPUACCT) | - (1 << VIR_CGROUP_CONTROLLER_CPUSET)); - - if (virCgroupNew(-1, name, domain, controllers, group) < 0) + if (virCgroupNew(-1, name, domain, VIR_CGROUP_THREAD_CONTROLLER_MASK, + group) < 0) goto cleanup;
if (virCgroupMakeGroup(domain, *group, create, VIR_CGROUP_NONE) < 0) { diff --git a/src/util/vircgroup.h b/src/util/vircgroup.h index f244c24..f71aed5 100644 --- a/src/util/vircgroup.h +++ b/src/util/vircgroup.h @@ -52,6 +52,13 @@ VIR_ENUM_DECL(virCgroupController); * Make sure we will not overflow */ verify(VIR_CGROUP_CONTROLLER_LAST < 8 * sizeof(int));
+enum { + VIR_CGROUP_THREAD_CONTROLLER_MASK = + ((1 << VIR_CGROUP_CONTROLLER_CPU) | + (1 << VIR_CGROUP_CONTROLLER_CPUACCT) | + (1 << VIR_CGROUP_CONTROLLER_CPUSET)) +}; + typedef enum { VIR_CGROUP_THREAD_VCPU = 0, VIR_CGROUP_THREAD_EMULATOR,