Add checkpatch action from https://github.com/webispy/checkpatch-action
to workflow CI, this project uses the Linux kernel tree's checkpatch.pl
to review the Pull Request, C code changes for the coding style issues.
We try to follow the coding standards that of the Linux Kernel, with some
exceptions recorded in the .checkpatch.conf file, asking checkpatch.pl
to ignore those. Integrating this action will make every change
complaint with Linux Kernel coding standards. As per their GitHub page
[1] the project uses GPL-2.0 license.
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com> Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
TJH: Since the action requires info embedded in the Github pull request,
only run it on pull requests. Don't run it on pushes as it will
produce a false positive
Tom Hromatka [Tue, 1 Aug 2023 21:17:35 +0000 (15:17 -0600)]
python: Surround systemd code with m4 conditionals
Surround the systemd python logic with m4 ifdef(`WITH_SYSTEMD'...).
This will conditionally add the systemd code iff systemd is enabled
in configure.ac
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
Tom Hromatka [Wed, 2 Aug 2023 18:39:06 +0000 (12:39 -0600)]
ftests: Fix erroneous calls to log_error()
Two places in the functional tests were calling a nonexistent
logging function - log_error(). Replace these erroneous calls
with calls to log_critical().
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
configure.ac: add check for systemd library and header files
systemd support is now enabled by default, unless explicitly disabled
during the ./configure by passing --enable-systemd=no. The make may
fail with:
systemd.c:9:10: fatal error: systemd/sd-bus.h: No such file or directory
9 | #include <systemd/sd-bus.h>
| ^~~~~~~~~~~~~~~~~~
compilation terminated.
if the host system is missing the systemd library and development files,
due to missing checks for their existence in ./configure.ac. This patch
add them.
Fixes: https://github.com/libcgroup/libcgroup/issues/387 Reported-by: Tomasz Kłoczko <kloczek@github.com> Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com> Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
Tom Hromatka [Thu, 20 Jul 2023 14:24:16 +0000 (19:54 +0530)]
cgsnapshot: Fix compiler truncation warning
Fix the following warning when running make distcheck
../../../../src/tools/cgsnapshot.c: In function ‘is_ctlr_on_list’:
../../../../src/tools/cgsnapshot.c:532:57: warning: ‘%s’ directive output may be truncated writing up to 409599 bytes into a region of size 4096 [-Wformat-truncation=]
532 | snprintf(controllers[i], FILENAME_MAX, "%s", tmp_controllers[i]);
| ^~
Suggested-by: Kamalesh Babulal <kamalesh.babulal@oracle.com> Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
api.c: fix unused variable in cgroup_parse_rules_file()
Fix an unused variable warning, reported by the Coverity tool:
CID 320877 (#1 of 1): Unused value (UNUSED_VALUE) assigned_pointer:
Assigning value NULL to pwd here, but that stored value is overwritten
before it can be used.
Move the grp, pwd variables assignment to beginning of the while loop in
the cgroup_parse_rules_file().
Tested with following cgrules
-----------------------------
$ cat /etc/cgrules.conf
student devices /usergroup/students
@admin * admingroup/
peter cpu test1/
% memory test2/
* * default/
$ sudo CGROUP_LOGLEVEL=DEBUG ./src/daemon/cgrulesengd -d -n
Parsing configuration file /etc/cgrules.conf.
Added rule student (UID: 1001, GID: -1) -> /usergroup/students for
controllers: devices
Added rule @admin (UID: -1, GID: 1004) -> admingroup/ for controllers: *
Added rule peter (UID: 1003, GID: -1) -> test1/ for controllers: cpu
Added rule % (UID: 1003, GID: -1) -> test2/ for controllers: memory
Added rule * (UID: -2, GID: -2) -> default/ for controllers: *
Parsing of configuration file complete.
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com> Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
tools/cgsnapshot: fix string null terminate in parse_controllers()
Fix string not null terminated warning, reported by the Coverity tool:
CID 258299 (#2 of 2): String not null terminated (STRING_NULL)18.
string_null: Passing unterminated string *controllers to
display_controller_data, which expects a null-terminated string.
use snprintf() instead of strncpy() and manually terminate the string to
keep Coverity happy.
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com> Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
src/api.c: fix TOCTOU in cg_get_procname_from_proc_cmdline()
Fix a TOCTOU issue, reported by Coverity tool:
CID 258283 (#1 of 1): Time of check time of use (TOCTOU)1.
fs_check_call: Calling function readlink to perform check on path
Coverity gets confused when a char array is re-used for constructing
different paths and complains about TOCTOU for unrelated paths, fix it
by using different char arrays for different path, as a side effect it
also improves the readability of the code.
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com> Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
CID 258268 (#1 of 1): Time of check time of use (TOCTOU)28.
fs_check_call: Calling function access to perform check on path.
Coverity gets confused when a char array is re-used for constructing
different paths and complains about TOCTOU for unrelated paths, fix it
by using different char arrays for different path, as a side effect it
also improves the readability of the code.
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com> Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
tools/cgxget: fix TOCTOU in fill_empty_controller()
Fix a TOCTOU issue, reported by Coverity tool:
CID 258277 (#1 of 1): Time of check time of use (TOCTOU)13.
fs_check_call: Calling function access to perform check on path
Coverity gets confused when a char array is re-used for constructing
different paths and complains about TOCTOU for unrelated paths, fix it
by using different char arrays for different path, as a side effect it
also improves the readability of the code.
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com> Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
tools/cgget: fix TOCTOU in fill_empty_controller()
Fix a TOCTOU issue, reported by Coverity tool:
CID 258277 (#2 of 2): Time of check time of use (TOCTOU)13.
fs_check_call: Calling function access to perform check on path
Coverity gets confused when a char array is re-used for constructing
different paths and complains about TOCTOU for unrelated paths, fix it
by using different char arrays for different path, as a side effect it
also improves the readability of the code.
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com> Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
tools: cgconfig/cgrulesengd - skip parsing non .conf files
Currently, the list of files to be parsed is constructed by reading the
directories passed with '-L' command line option or by cgrulesend from
'/etc/cgconfig.d'. The directories might also host non-configuration
files, parsing them will result in failure.
Consider the following example:
# ls /etc/cgconfig.d
cgconfig-oradb.conf cgconfig-oradb.conf.rpmsave test .conf e
# /usr/sbin/cgconfigparser -l /etc/cgconfig.conf -L /etc/cgconfig.d -s 1664
/usr/sbin/cgconfigparser; error loading /etc/cgconfig.d/cgconfig-oradb.conf.rpmsave:
Cgroup, the requested group parameter does not exist
fix it by skipping files with non .conf extensions, while building the
list of files to be parsed for cgroup configurations.
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com> Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
api: cg_move_task_files() - rearrange code to avoid extra check
Fix unused variables, reported by the Coverity tool:
CID 320878 (#1 of 1): Unused value (UNUSED_VALUE)assigned_value:
Assigning value 0 to ret here, but that stored value is overwritten
before it can be used.
Currently, in cg_move_task_files(), the ret is checked for ESRCH and set
to zero, if true, and for other error values it executes the error path
but immediately the ret is over-written without reading the set zero,
re-arrange the code to such that only the error path is executed and ret
is not set to zero.
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com> Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
Fix few cython-lints non-Python constructs, reported by cython-lint
tool:
- libcgroup.pyx:222:26: E711 comparison to None should be 'if cond is None:'
- libcgroup.pyx:380:82: E703 statement ends with a semicolon
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com> Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
Add configuration for cython-lint, to ignore errors such as:
- Allowed length of line to be 100
- Ignore error code 'E128' continuation line under-indented for visual
indent
Cython-lint is available https://github.com/MarcoGorelli/cython-lint,
expects the file name to be pyproject.toml
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com> Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
CID 320876 (#1 of 1): Unused value (UNUSED_VALUE)assigned_value:
Assigning value 0 to ret here, but that stored value is overwritten
before it can be used.
If the mapping from v1->v2 and vice versa fail, with -i
(ignore-unmappable) set, ret is set to zero and is immediately
over-written, re-arrange the check, and adjust the commentary to avoid
clobbering ret, by taking the error path when -i is unset or else
continuing when set, skipping to set ret to zero.
Suggested-by: Tom Hromatka <tom.hromatka@oracle.com> Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com> Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
CID 320879 (#1 of 1): Unused value (UNUSED_VALUE)assigned_value:
Assigning value 0 to ret here, but that stored value is overwritten
before it can be used.
If the mapping from v1->v2 and vice versa fail, with -i
(ignore-unmappable) set, ret is set to zero and is immediately
over-written, re-arrange the check, and adjust the commentary to avoid
clobbering ret, by taking the error path when -i is unset or else
continuing when set, skipping to set ret to zero.
Suggested-by: Tom Hromatka <tom.hromatka@oracle.com> Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com> Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
api: fix missing goto in cgroup_get_current_controller_path()
Fix missing goto on error in cgroup_get_current_controller_path(), it
was reported by Coverity tool as unused value:
CID 320875 (#1 of 1): Unused value (UNUSED_VALUE)assigned_value:
Assigning value ECGOTHER to ret here, but that stored value is
overwritten before it can be used.
It turns out that, it is more than an over-written value, the strdup()
was missing goto error path statement on failure, add it.
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com> Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
Tom Hromatka [Mon, 3 Jul 2023 19:07:41 +0000 (13:07 -0600)]
cgsnapshot: Fix possible non-null-terminated array
Coverity flagged a code path where the controllers[][] structure in
parse_controllers() may not have a '\0' string as its last entry.
This would break the logic in is_ctlr_on_list().
The function may iterate past the end of the buffer looking for
a null terminator.
In parse_controllers: A character buffer that has not been null
terminated is passed to a function expecting a null terminated
string (CWE-170)
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com> Reviewed-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Tom Hromatka [Mon, 3 Jul 2023 15:58:13 +0000 (09:58 -0600)]
ftests: skip test 002 on legacy, containerized test runs
Skip test 002-cgdelete-recursive_delete.py on legacy (cgroup v1),
containerized test runs. It occasionally fails in Github Actions, and
I think the failure is simply because the machine is underpowered. In
these cases, the failure is usually reported as:
002-cgdelete-recursive_delete.py - Failed to get the pid of the child process:
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com> Reviewed-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Tom Hromatka [Mon, 3 Jul 2023 15:51:58 +0000 (09:51 -0600)]
ftests: Retry run() command after websocket failure
LXC/LXD will sometimes throw an "Error: websocket: bad handshake" error
on underpowered machines. Wait a bit (arbitrarily chosen 5 seconds) and
retry the command.
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com> Reviewed-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
tools/cgclassify: fix controller overflow array range
Fix out-of-bounds write issue, reported by Coverity tool:
CID 321270 (#1 of 1): Out-of-bounds write (OVERRUN)47. overrun-local:
Overrunning array info of 16 4128-byte elements at element index 16
(byte offset 70175) using index i (which evaluates to 16).
MAX_MNT_ELEMENTS is an array that's allocated for array parsing and
populating the mount points, as per Linux Kernel, this can't be above
16 and it works fine while checking for index < MAX_MNT_ELEMENTS, but
in this case, we rely on the mount point name to be empty ('\0'), since
allowed maximum mount points are 16, increase the allocation index to
17 for the info structure, to accommodate 16 controllers, but that is
unlikely.
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com> Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
Tom Hromatka [Wed, 24 May 2023 13:34:51 +0000 (07:34 -0600)]
ftests: Rework test 071 to use cgroup_write_systemd_default_cgroup()
cgroup_write_systemd_default_cgroup() populates libcgroup's /var/run
file with the default slice/scope. No verification is done at the time
of writing.
cgroup_set_default_systemd_cgroup() reads the /var/run file and verifies
that it points to a valid path. If so, it populates libcgroup's global
variable, systemd_default_cgroup. systemd_default_cgroup is then used
in any subsequent building of libcgroup paths.
Previously, test 071 tested cgroup_set_default_systemd_cgroup() but it
didn't exercise cgroup_write_systemd_default_cgroup(). Rework test 071
to exercise the most likely combinations of writing/setting the default
path that a user would encounter.
-----------------------------------------------------------------
Test Results:
Run Date: May 24 07:32:54
Passed: 1 test(s)
Skipped: 0 test(s)
Failed: 0 test(s)
-----------------------------------------------------------------
Timing Results:
Test Time (sec)
-----------------------------------------------------
setup 0.00
071-sudo-set_default_systemd_cgroup.py 4.67
teardown 0.00
-----------------------------------------------------
Total Run Time 4.67
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com> Reviewed-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Tom Hromatka [Fri, 19 May 2023 22:09:54 +0000 (16:09 -0600)]
python: Add support for NULL controllers[] in get_processes()
Add support for an empty controllers list in the Python bindings.
The python method, get_processes(), will then send in a NULL pointer
in the controllers field into the C function cgroup_get_procs().
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com> Reviewed-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Tom Hromatka [Wed, 24 May 2023 20:12:45 +0000 (14:12 -0600)]
python: Add cgroup v1 support to move_process()
Add support for providing a single controller to Cgroup.move_process().
move_process() invokes cgroup_change_cgroup_path() which utilizes an
array of controller strings.
This change only adds support for a single controller via the python
bindings, but a list of controllers could be supported in the future.
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com> Reviewed-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Tom Hromatka [Thu, 25 May 2023 02:35:35 +0000 (20:35 -0600)]
python: Add method to clear the default slice/scope
Add a convenience method to clear the default slice/scope. This may be
useful in cases where the user is done with the slice/scope and wants to
resume operating at the root cgroup level.
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com> Reviewed-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Tom Hromatka [Fri, 19 May 2023 22:05:25 +0000 (16:05 -0600)]
python: Add bindings for cgroup_write_systemd_default_cgroup()
Add python bindings for cgroup_write_systemd_default_cgroup(). As part
of this change, demote cgroup_set_default_systemd_cgroup() to an
internal function - __set_default_systemd_cgroup(). I would expect
users to invoke write_default_systemd_scope() and utilize that to set
the default slice/scope.
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com> Reviewed-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Kamalesh Babulal [Fri, 23 Jun 2023 09:40:00 +0000 (15:10 +0530)]
api: fix build warning
Fix a build warning:
cgcreate.c: In function ‘create_systemd_scope’:
cgcreate.c:81:17: warning: ‘strncpy’ specified bound depends on the length of the source argument [-Wstringop-truncation]
81 | strncpy(slice, cg->name, len);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cgcreate.c:80:23: note: length computed here
80 | len = strlen(cg->name) - strlen(scope);
fix it by using, length of destination in the strncpy().
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com> Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
Kamalesh Babulal [Fri, 23 Jun 2023 06:19:04 +0000 (11:49 +0530)]
api: add ret value check in cgroup_get_current_controller_path()
Fix unchecked return value, reported by the Coverity tool:
CID 320874 (#1 of 1): Unchecked return value from library
(CHECKED_RETURN)13. check_return: Calling fscanf(pid_cgroup_fd,
"%*[^\n]\n") without checking return value. This library function may
fail and return an error code.
add the missing return value check from fscanf() in
cgroup_get_current_controller_path()
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com> Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
Kamalesh Babulal [Wed, 21 Jun 2023 04:16:20 +0000 (09:46 +0530)]
cgcreate: fix null pointer dereference in create_systemd_scope()
Fix a NULL pointer dereference, reported by the Coverity tool:
CID 321267 (#1 of 1): Dereference null return value (NULL_RETURNS)6.
dereference: Dereferencing a pointer that might be NULL scope when
calling strlen.
check for the return value from strstr(), before dereferencing it.
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com> Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
Kamalesh Babulal [Sun, 18 Jun 2023 07:10:33 +0000 (12:40 +0530)]
tools/cgexec: fix memory leak in find_scope_pid()
Fix a memory leak, reported by the Coverity tool.
CID 321265 (#1-2 of 2): Resource leak (RESOURCE_LEAK)37. leaked_storage:
Variable pids going out of scope leaks the storage it points to.
find_scope_pid (), calls cgroup_get_procs() to get the pids of the
tasks under cgroup name, and it's up to the caller to free the allocated
pids. Fix it by calling free(pids) after every call to
cgroup_get_procs().
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com> Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
Kamalesh Babulal [Thu, 15 Jun 2023 11:22:06 +0000 (16:52 +0530)]
ftests: add test to replace scope idle_thread using cgclassify
Add a test to replace systemd scope default idle_thread using
cgclassify '-r' flag.
-----------------------------------------------------------------
Test Results:
Run Date: Jun 15 11:20:25
Passed: 1 test(s)
Skipped: 0 test(s)
Failed: 0 test(s)
-----------------------------------------------------------------
Timing Results:
Test Time (sec)
---------------------------------------------------
setup 0.00
088-sudo-cgclassify_systemd_scope.py 17.63
teardown 0.00
---------------------------------------------------
Total Run Time 17.63
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com> Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
ftests: add support to replace idle_thread of systemd scope
Allow replacing the default idle_thread during process classification
into a cgroup using cgclassify by introducing replace_id flag, that
when unset(default) has no effect on the process created into systemd
scope cgroup, when set replaces the default idle_thread with the
process being created.
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com> Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
Kamalesh Babulal [Tue, 20 Jun 2023 11:44:25 +0000 (17:14 +0530)]
tools/cgclassify: add -r option for systemd scope
Provide an option for users to replace the default idle_thread created
for systemd scope. With '-r' option specified, the first pid passed as
the argument to cgclassify will replace the default idle_thread, if it
exists. Also, if it's the only task, killing it will remove the .scope
cgroup it's running in.
For non scope cgroups, it launches the task program. The algorithm in
brief is as follows:
Once the first pid of argument list migrated to the expected cgroup(s):
1. The controller, cgroups details of the pid is captured before the
migration, so incase an error occurs, it easy to roll back to the
original cgroups the pid belonged to.
2. Once the migrated is done, parse /proc/<pid>/cgroup of the first
pid and if the cgroup name ends with .scope and has a task with
/proc/<pid>/cmdline as "libcgroup_systemd_idle_thread", kill
the task. This gives the illusion of replacement.
3. If an error occurs, migrate the pid back to the original cgroups.
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com> Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
ftests: add test to replace scope idle_thread using cgexec
Add a test to replace systemd scope default idle_thread using cgexec
'-r' flag.
-----------------------------------------------------------------
Test Results:
Run Date: Jun 01 07:02:45
Passed: 1 test(s)
Skipped: 0 test(s)
Failed: 0 test(s)
-----------------------------------------------------------------
Timing Results:
Test Time (sec)
-----------------------------------------------
setup 0.00
085-sudo-cgexec_systemd_scope.py 9.19
teardown 0.00
-----------------------------------------------
Total Run Time 9.19
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com> Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
Kamalesh Babulal [Wed, 24 May 2023 11:39:15 +0000 (11:39 +0000)]
ftests: add support to replace idle_thread of systemd scope
Allow replacing the default idle_thread during process creation into a
cgroup using cgexec by introducing replace_id flag, that when unset
(default) has no effect on the process created into systemd scope
cgroup, when set replaces the default idle_thread with the process
being created.
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com> Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
Kamalesh Babulal [Thu, 15 Jun 2023 10:36:54 +0000 (16:06 +0530)]
tools/cgexec: add -r option for systemd scope
Provide an option for users to replace the default idle_thread created
for systemd scope. With '-r' option specified, the program passed as
the argument to cgexec will replace the default idle_thread, if it
exists. Also, if it's the only task, killing it will remove the .scope
cgroup it's running in.
For non scope cgroups, it launches the task program. The algorithm in
brief is as follows:
Once the current task, instance of cgexec is migrated to the
expected cgroup(s):
1. fork() and in the child path perform the exec to program passed in
the command line. This means, we have cgexec instance and program
executing in the desired cgroup(s).
2. In the parent, parse /proc/<pid>/cgroup of the current process
(cgexec) and if the cgroup name ends with .scope and has a task
with /proc/<pid>/cmdline as "libcgroup_systemd_idle_thread", kill
the task. This gives the illusion of replacement.
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com> Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>