]>
Commit | Line | Data |
---|---|---|
04fd09d4 SL |
1 | From 90cd9bdd343840190329a63aea1ea448a6a429e7 Mon Sep 17 00:00:00 2001 |
2 | From: Thomas Richter <tmricht@linux.ibm.com> | |
3 | Date: Tue, 19 Feb 2019 16:36:39 +0100 | |
4 | Subject: perf test: Fix failure of 'evsel-tp-sched' test on s390 | |
5 | ||
6 | [ Upstream commit 03d309711d687460d1345de8a0363f45b1c8cd11 ] | |
7 | ||
8 | Commit 489338a717a0 ("perf tests evsel-tp-sched: Fix bitwise operator") | |
9 | causes test case 14 "Parse sched tracepoints fields" to fail on s390. | |
10 | ||
11 | This test succeeds on x86. | |
12 | ||
13 | In fact this test now fails on all architectures with type char treated | |
14 | as type unsigned char. | |
15 | ||
16 | The root cause is the signed-ness of character arrays in the tracepoints | |
17 | sched_switch for structure members prev_comm and next_comm. | |
18 | ||
19 | On s390 the output of: | |
20 | ||
21 | [root@m35lp76 perf]# cat /sys/kernel/debug/tracing/events/sched/sched_switch/format | |
22 | name: sched_switch | |
23 | ID: 287 | |
24 | format: | |
25 | field:unsigned short common_type; offset:0; size:2; signed:0; | |
26 | ... | |
27 | field:char prev_comm[16]; offset:8; size:16; signed:0; | |
28 | ... | |
29 | field:char next_comm[16]; offset:40; size:16; signed:0; | |
30 | ||
31 | reveals the character arrays prev_comm and next_comm are per | |
32 | default unsigned char and have values in the range of 0..255. | |
33 | ||
34 | On x86 both fields are signed as this output shows: | |
35 | [root@f29]# cat /sys/kernel/debug/tracing/events/sched/sched_switch/format | |
36 | name: sched_switch | |
37 | ID: 287 | |
38 | format: | |
39 | field:unsigned short common_type; offset:0; size:2; signed:0; | |
40 | ... | |
41 | field:char prev_comm[16]; offset:8; size:16; signed:1; | |
42 | ... | |
43 | field:char next_comm[16]; offset:40; size:16; signed:1; | |
44 | ||
45 | and the character arrays prev_comm and next_comm are per default signed | |
46 | char and have values in the range of -1..127. The implementation of | |
47 | type char is architecture specific. | |
48 | ||
49 | Since the character arrays in both tracepoints sched_switch and | |
50 | sched_wakeup should contain ascii characters, simply omit the check for | |
51 | signedness in the test case. | |
52 | ||
53 | Output before: | |
54 | ||
55 | [root@m35lp76 perf]# ./perf test -F 14 | |
56 | 14: Parse sched tracepoints fields : | |
57 | --- start --- | |
58 | sched:sched_switch: "prev_comm" signedness(0) is wrong, should be 1 | |
59 | sched:sched_switch: "next_comm" signedness(0) is wrong, should be 1 | |
60 | sched:sched_wakeup: "comm" signedness(0) is wrong, should be 1 | |
61 | ---- end ---- | |
62 | 14: Parse sched tracepoints fields : FAILED! | |
63 | [root@m35lp76 perf]# | |
64 | ||
65 | Output after: | |
66 | ||
67 | [root@m35lp76 perf]# ./perf test -Fv 14 | |
68 | 14: Parse sched tracepoints fields : | |
69 | --- start --- | |
70 | ---- end ---- | |
71 | Parse sched tracepoints fields: Ok | |
72 | [root@m35lp76 perf]# | |
73 | ||
74 | Fixes: 489338a717a0 ("perf tests evsel-tp-sched: Fix bitwise operator") | |
75 | ||
76 | Signed-off-by: Thomas Richter <tmricht@linux.ibm.com> | |
77 | Cc: Heiko Carstens <heiko.carstens@de.ibm.com> | |
78 | Cc: Hendrik Brueckner <brueckner@linux.vnet.ibm.com> | |
79 | Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> | |
80 | Link: http://lkml.kernel.org/r/20190219153639.31267-1-tmricht@linux.ibm.com | |
81 | Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> | |
82 | Signed-off-by: Sasha Levin <sashal@kernel.org> | |
83 | --- | |
84 | tools/perf/tests/evsel-tp-sched.c | 6 +++--- | |
85 | 1 file changed, 3 insertions(+), 3 deletions(-) | |
86 | ||
87 | diff --git a/tools/perf/tests/evsel-tp-sched.c b/tools/perf/tests/evsel-tp-sched.c | |
88 | index 67bcbf876776..d0406116c905 100644 | |
89 | --- a/tools/perf/tests/evsel-tp-sched.c | |
90 | +++ b/tools/perf/tests/evsel-tp-sched.c | |
91 | @@ -43,7 +43,7 @@ int test__perf_evsel__tp_sched_test(struct test *test __maybe_unused, int subtes | |
92 | return -1; | |
93 | } | |
94 | ||
95 | - if (perf_evsel__test_field(evsel, "prev_comm", 16, true)) | |
96 | + if (perf_evsel__test_field(evsel, "prev_comm", 16, false)) | |
97 | ret = -1; | |
98 | ||
99 | if (perf_evsel__test_field(evsel, "prev_pid", 4, true)) | |
100 | @@ -55,7 +55,7 @@ int test__perf_evsel__tp_sched_test(struct test *test __maybe_unused, int subtes | |
101 | if (perf_evsel__test_field(evsel, "prev_state", sizeof(long), true)) | |
102 | ret = -1; | |
103 | ||
104 | - if (perf_evsel__test_field(evsel, "next_comm", 16, true)) | |
105 | + if (perf_evsel__test_field(evsel, "next_comm", 16, false)) | |
106 | ret = -1; | |
107 | ||
108 | if (perf_evsel__test_field(evsel, "next_pid", 4, true)) | |
109 | @@ -73,7 +73,7 @@ int test__perf_evsel__tp_sched_test(struct test *test __maybe_unused, int subtes | |
110 | return -1; | |
111 | } | |
112 | ||
113 | - if (perf_evsel__test_field(evsel, "comm", 16, true)) | |
114 | + if (perf_evsel__test_field(evsel, "comm", 16, false)) | |
115 | ret = -1; | |
116 | ||
117 | if (perf_evsel__test_field(evsel, "pid", 4, true)) | |
118 | -- | |
119 | 2.19.1 | |
120 |