perf test shell record_bpf_filter: Skip 6.2 kernel
[platform/kernel/linux-starfive.git] / tools / perf / tests / shell / record_bpf_filter.sh
1 #!/bin/sh
2 # perf record sample filtering (by BPF) tests
3 # SPDX-License-Identifier: GPL-2.0
4
5 set -e
6
7 err=0
8 perfdata=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
9
10 cleanup() {
11   rm -f "${perfdata}"
12   rm -f "${perfdata}".old
13   trap - EXIT TERM INT
14 }
15
16 trap_cleanup() {
17   cleanup
18   exit 1
19 }
20 trap trap_cleanup EXIT TERM INT
21
22 test_bpf_filter_priv() {
23   echo "Checking BPF-filter privilege"
24
25   if [ "$(id -u)" != 0 ]
26   then
27     echo "bpf-filter test [Skipped permission]"
28     err=2
29     return
30   fi
31   if ! perf record -e task-clock --filter 'period > 1' \
32           -o /dev/null --quiet true 2>&1
33   then
34     echo "bpf-filter test [Skipped missing BPF support]"
35     err=2
36     return
37   fi
38 }
39
40 test_bpf_filter_basic() {
41   echo "Basic bpf-filter test"
42
43   if ! perf record -e task-clock -c 10000 --filter 'ip < 0xffffffff00000000' \
44           -o "${perfdata}" true 2> /dev/null
45   then
46     echo "Basic bpf-filter test [Failed record]"
47     err=1
48     return
49   fi
50   if perf script -i "${perfdata}" -F ip | grep 'ffffffff[0-9a-f]*'
51   then
52     if uname -r | grep -q ^6.2
53     then
54       echo "Basic bpf-filter test [Skipped unsupported kernel]"
55       err=2
56       return
57     fi
58     echo "Basic bpf-filter test [Failed invalid output]"
59     err=1
60     return
61   fi
62   echo "Basic bpf-filter test [Success]"
63 }
64
65 test_bpf_filter_fail() {
66   echo "Failing bpf-filter test"
67
68   # 'cpu' requires PERF_SAMPLE_CPU flag
69   if ! perf record -e task-clock --filter 'cpu > 0' \
70           -o /dev/null true 2>&1 | grep PERF_SAMPLE_CPU
71   then
72     echo "Failing bpf-filter test [Failed forbidden CPU]"
73     err=1
74     return
75   fi
76
77   if ! perf record --sample-cpu -e task-clock --filter 'cpu > 0' \
78           -o /dev/null true 2>/dev/null
79   then
80     echo "Failing bpf-filter test [Failed should succeed]"
81     err=1
82     return
83   fi
84
85   echo "Failing bpf-filter test [Success]"
86 }
87
88 test_bpf_filter_group() {
89   echo "Group bpf-filter test"
90
91   if ! perf record -e task-clock --filter 'period > 1000 || ip > 0' \
92           -o /dev/null true 2>/dev/null
93   then
94     echo "Group bpf-filter test [Failed should succeed]"
95     err=1
96     return
97   fi
98
99   if ! perf record -e task-clock --filter 'cpu > 0 || ip > 0' \
100           -o /dev/null true 2>&1 | grep PERF_SAMPLE_CPU
101   then
102     echo "Group bpf-filter test [Failed forbidden CPU]"
103     err=1
104     return
105   fi
106
107   if ! perf record -e task-clock --filter 'period > 0 || code_pgsz > 4096' \
108           -o /dev/null true 2>&1 | grep PERF_SAMPLE_CODE_PAGE_SIZE
109   then
110     echo "Group bpf-filter test [Failed forbidden CODE_PAGE_SIZE]"
111     err=1
112     return
113   fi
114
115   echo "Group bpf-filter test [Success]"
116 }
117
118
119 test_bpf_filter_priv
120
121 if [ $err = 0 ]; then
122   test_bpf_filter_basic
123 fi
124
125 if [ $err = 0 ]; then
126   test_bpf_filter_fail
127 fi
128
129 if [ $err = 0 ]; then
130   test_bpf_filter_group
131 fi
132
133 cleanup
134 exit $err