]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blame - releases/4.14.111/perf-test-fix-failure-of-evsel-tp-sched-test-on-s390.patch
Fixes for 4.19
[thirdparty/kernel/stable-queue.git] / releases / 4.14.111 / perf-test-fix-failure-of-evsel-tp-sched-test-on-s390.patch
CommitLineData
04fd09d4
SL
1From 90cd9bdd343840190329a63aea1ea448a6a429e7 Mon Sep 17 00:00:00 2001
2From: Thomas Richter <tmricht@linux.ibm.com>
3Date: Tue, 19 Feb 2019 16:36:39 +0100
4Subject: perf test: Fix failure of 'evsel-tp-sched' test on s390
5
6[ Upstream commit 03d309711d687460d1345de8a0363f45b1c8cd11 ]
7
8Commit 489338a717a0 ("perf tests evsel-tp-sched: Fix bitwise operator")
9causes test case 14 "Parse sched tracepoints fields" to fail on s390.
10
11This test succeeds on x86.
12
13In fact this test now fails on all architectures with type char treated
14as type unsigned char.
15
16The root cause is the signed-ness of character arrays in the tracepoints
17sched_switch for structure members prev_comm and next_comm.
18
19On 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
31reveals the character arrays prev_comm and next_comm are per
32default unsigned char and have values in the range of 0..255.
33
34On 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
45and the character arrays prev_comm and next_comm are per default signed
46char and have values in the range of -1..127. The implementation of
47type char is architecture specific.
48
49Since the character arrays in both tracepoints sched_switch and
50sched_wakeup should contain ascii characters, simply omit the check for
51signedness in the test case.
52
53Output 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
65Output 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
74Fixes: 489338a717a0 ("perf tests evsel-tp-sched: Fix bitwise operator")
75
76Signed-off-by: Thomas Richter <tmricht@linux.ibm.com>
77Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
78Cc: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
79Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
80Link: http://lkml.kernel.org/r/20190219153639.31267-1-tmricht@linux.ibm.com
81Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
82Signed-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
87diff --git a/tools/perf/tests/evsel-tp-sched.c b/tools/perf/tests/evsel-tp-sched.c
88index 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--
1192.19.1
120