diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2016-04-06 11:51:33 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2016-04-06 13:13:40 -0400 |
commit | a3bca91f2fe54af502deaf277dd5ac0e18bffde4 (patch) | |
tree | 9d045effe285fdedcd924a8b20b548b139a39cdb /tools/perf | |
parent | 85f8f966a152f5110a12b76511743fbfb62130ba (diff) |
perf trace: Beautify sched_setscheduler 'policy' argument
$ trace -e sched_setscheduler chrt -f 1 usleep 1
chrt: failed to set pid 0's policy: Operation not permitted
0.005 ( 0.005 ms): chrt/19189 sched_setscheduler(policy: FIFO, param: 0x7ffec5273d70) = -1 EPERM Operation not permitted
$
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/n/tip-i5vlo5n5jv0amt8bkyicmdxh@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf')
-rw-r--r-- | tools/perf/builtin-trace.c | 4 | ||||
-rw-r--r-- | tools/perf/trace/beauty/sched_policy.c | 44 |
2 files changed, 48 insertions, 0 deletions
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index d309f4535a45..c283153d8c7f 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c | |||
@@ -1073,6 +1073,8 @@ static size_t syscall_arg__scnprintf_getrandom_flags(char *bf, size_t size, | |||
1073 | .arg_scnprintf = { [arg] = SCA_STRARRAY, }, \ | 1073 | .arg_scnprintf = { [arg] = SCA_STRARRAY, }, \ |
1074 | .arg_parm = { [arg] = &strarray__##array, } | 1074 | .arg_parm = { [arg] = &strarray__##array, } |
1075 | 1075 | ||
1076 | #include "trace/beauty/sched_policy.c" | ||
1077 | |||
1076 | static struct syscall_fmt { | 1078 | static struct syscall_fmt { |
1077 | const char *name; | 1079 | const char *name; |
1078 | const char *alias; | 1080 | const char *alias; |
@@ -1304,6 +1306,8 @@ static struct syscall_fmt { | |||
1304 | .arg_scnprintf = { [1] = SCA_SIGNUM, /* sig */ }, }, | 1306 | .arg_scnprintf = { [1] = SCA_SIGNUM, /* sig */ }, }, |
1305 | { .name = "rt_tgsigqueueinfo", .errmsg = true, | 1307 | { .name = "rt_tgsigqueueinfo", .errmsg = true, |
1306 | .arg_scnprintf = { [2] = SCA_SIGNUM, /* sig */ }, }, | 1308 | .arg_scnprintf = { [2] = SCA_SIGNUM, /* sig */ }, }, |
1309 | { .name = "sched_setscheduler", .errmsg = true, | ||
1310 | .arg_scnprintf = { [1] = SCA_SCHED_POLICY, /* policy */ }, }, | ||
1307 | { .name = "seccomp", .errmsg = true, | 1311 | { .name = "seccomp", .errmsg = true, |
1308 | .arg_scnprintf = { [0] = SCA_SECCOMP_OP, /* op */ | 1312 | .arg_scnprintf = { [0] = SCA_SECCOMP_OP, /* op */ |
1309 | [1] = SCA_SECCOMP_FLAGS, /* flags */ }, }, | 1313 | [1] = SCA_SECCOMP_FLAGS, /* flags */ }, }, |
diff --git a/tools/perf/trace/beauty/sched_policy.c b/tools/perf/trace/beauty/sched_policy.c new file mode 100644 index 000000000000..c205bc608b3c --- /dev/null +++ b/tools/perf/trace/beauty/sched_policy.c | |||
@@ -0,0 +1,44 @@ | |||
1 | #include <sched.h> | ||
2 | |||
3 | /* | ||
4 | * Not defined anywhere else, probably, just to make sure we | ||
5 | * catch future flags | ||
6 | */ | ||
7 | #define SCHED_POLICY_MASK 0xff | ||
8 | |||
9 | #ifndef SCHED_DEADLINE | ||
10 | #define SCHED_DEADLINE 6 | ||
11 | #endif | ||
12 | |||
13 | static size_t syscall_arg__scnprintf_sched_policy(char *bf, size_t size, | ||
14 | struct syscall_arg *arg) | ||
15 | { | ||
16 | const char *policies[] = { | ||
17 | "NORMAL", "FIFO", "RR", "BATCH", "ISO", "IDLE", "DEADLINE", | ||
18 | }; | ||
19 | size_t printed; | ||
20 | int policy = arg->val, | ||
21 | flags = policy & ~SCHED_POLICY_MASK; | ||
22 | |||
23 | policy &= SCHED_POLICY_MASK; | ||
24 | if (policy <= SCHED_DEADLINE) | ||
25 | printed = scnprintf(bf, size, "%s", policies[policy]); | ||
26 | else | ||
27 | printed = scnprintf(bf, size, "%#x", policy); | ||
28 | |||
29 | #define P_POLICY_FLAG(n) \ | ||
30 | if (flags & SCHED_##n) { \ | ||
31 | printed += scnprintf(bf + printed, size - printed, "|%s", #n); \ | ||
32 | flags &= ~SCHED_##n; \ | ||
33 | } | ||
34 | |||
35 | P_POLICY_FLAG(RESET_ON_FORK); | ||
36 | #undef P_POLICY_FLAG | ||
37 | |||
38 | if (flags) | ||
39 | printed += scnprintf(bf + printed, size - printed, "|%#x", flags); | ||
40 | |||
41 | return printed; | ||
42 | } | ||
43 | |||
44 | #define SCA_SCHED_POLICY syscall_arg__scnprintf_sched_policy | ||