Skip to content

Commit

Permalink
selftests: cgroup: Simplify task self migration
Browse files Browse the repository at this point in the history
Simplify task migration by being oblivious about its PID during
migration. This allows to easily migrate individual threads as well.
This change brings no functional change and prepares grounds for thread
granularity migrating tests.

Signed-off-by: Michal Koutný <mkoutny@suse.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
  • Loading branch information
Michal Koutný authored and Tejun Heo committed Oct 7, 2019
1 parent 9a3284f commit 58c9f75
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 7 deletions.
16 changes: 11 additions & 5 deletions tools/testing/selftests/cgroup/cgroup_util.c
Original file line number Diff line number Diff line change
Expand Up @@ -282,10 +282,12 @@ int cg_enter(const char *cgroup, int pid)

int cg_enter_current(const char *cgroup)
{
char pidbuf[64];
return cg_write(cgroup, "cgroup.procs", "0");
}

snprintf(pidbuf, sizeof(pidbuf), "%d", getpid());
return cg_write(cgroup, "cgroup.procs", pidbuf);
int cg_enter_current_thread(const char *cgroup)
{
return cg_write(cgroup, "cgroup.threads", "0");
}

int cg_run(const char *cgroup,
Expand Down Expand Up @@ -410,11 +412,15 @@ int set_oom_adj_score(int pid, int score)
return 0;
}

char proc_read_text(int pid, const char *item, char *buf, size_t size)
ssize_t proc_read_text(int pid, bool thread, const char *item, char *buf, size_t size)
{
char path[PATH_MAX];

snprintf(path, sizeof(path), "/proc/%d/%s", pid, item);
if (!pid)
snprintf(path, sizeof(path), "/proc/%s/%s",
thread ? "thread-self" : "self", item);
else
snprintf(path, sizeof(path), "/proc/%d/%s", pid, item);

return read_text(path, buf, size);
}
4 changes: 3 additions & 1 deletion tools/testing/selftests/cgroup/cgroup_util.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
/* SPDX-License-Identifier: GPL-2.0 */
#include <stdbool.h>
#include <stdlib.h>

#define PAGE_SIZE 4096
Expand Down Expand Up @@ -35,6 +36,7 @@ extern int cg_run(const char *cgroup,
void *arg);
extern int cg_enter(const char *cgroup, int pid);
extern int cg_enter_current(const char *cgroup);
extern int cg_enter_current_thread(const char *cgroup);
extern int cg_run_nowait(const char *cgroup,
int (*fn)(const char *cgroup, void *arg),
void *arg);
Expand All @@ -45,4 +47,4 @@ extern int is_swap_enabled(void);
extern int set_oom_adj_score(int pid, int score);
extern int cg_wait_for_proc_count(const char *cgroup, int count);
extern int cg_killall(const char *cgroup);
extern char proc_read_text(int pid, const char *item, char *buf, size_t size);
extern ssize_t proc_read_text(int pid, bool thread, const char *item, char *buf, size_t size);
2 changes: 1 addition & 1 deletion tools/testing/selftests/cgroup/test_freezer.c
Original file line number Diff line number Diff line change
Expand Up @@ -701,7 +701,7 @@ static int proc_check_stopped(int pid)
char buf[PAGE_SIZE];
int len;

len = proc_read_text(pid, "stat", buf, sizeof(buf));
len = proc_read_text(pid, 0, "stat", buf, sizeof(buf));
if (len == -1) {
debug("Can't get %d stat\n", pid);
return -1;
Expand Down

0 comments on commit 58c9f75

Please sign in to comment.