xref: /OK3568_Linux_fs/kernel/tools/testing/selftests/ftrace/test.d/event/event-no-pid.tc (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/bin/sh
2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0
3*4882a593Smuzhiyun# description: event tracing - restricts events based on pid notrace filtering
4*4882a593Smuzhiyun# requires: set_event events/sched set_event_pid set_event_notrace_pid
5*4882a593Smuzhiyun# flags: instance
6*4882a593Smuzhiyun
7*4882a593Smuzhiyundo_reset() {
8*4882a593Smuzhiyun    echo > set_event
9*4882a593Smuzhiyun    echo > set_event_pid
10*4882a593Smuzhiyun    echo > set_event_notrace_pid
11*4882a593Smuzhiyun    echo 0 > options/event-fork
12*4882a593Smuzhiyun    echo 0 > events/enable
13*4882a593Smuzhiyun    clear_trace
14*4882a593Smuzhiyun    echo 1 > tracing_on
15*4882a593Smuzhiyun}
16*4882a593Smuzhiyun
17*4882a593Smuzhiyunfail() { #msg
18*4882a593Smuzhiyun    cat trace
19*4882a593Smuzhiyun    do_reset
20*4882a593Smuzhiyun    echo $1
21*4882a593Smuzhiyun    exit_fail
22*4882a593Smuzhiyun}
23*4882a593Smuzhiyun
24*4882a593Smuzhiyuncount_pid() {
25*4882a593Smuzhiyun    pid=$@
26*4882a593Smuzhiyun    cat trace | grep -v '^#' | sed -e 's/[^-]*-\([0-9]*\).*/\1/' | grep $pid | wc -l
27*4882a593Smuzhiyun}
28*4882a593Smuzhiyun
29*4882a593Smuzhiyuncount_no_pid() {
30*4882a593Smuzhiyun    pid=$1
31*4882a593Smuzhiyun    cat trace | grep -v '^#' | sed -e 's/[^-]*-\([0-9]*\).*/\1/' | grep -v $pid | wc -l
32*4882a593Smuzhiyun}
33*4882a593Smuzhiyun
34*4882a593Smuzhiyunenable_system() {
35*4882a593Smuzhiyun    system=$1
36*4882a593Smuzhiyun
37*4882a593Smuzhiyun    if [ -d events/$system ]; then
38*4882a593Smuzhiyun	echo 1 > events/$system/enable
39*4882a593Smuzhiyun    fi
40*4882a593Smuzhiyun}
41*4882a593Smuzhiyun
42*4882a593Smuzhiyunenable_events() {
43*4882a593Smuzhiyun    echo 0 > tracing_on
44*4882a593Smuzhiyun    # Enable common groups of events, as all events can allow for
45*4882a593Smuzhiyun    # events to be traced via scheduling that we don't care to test.
46*4882a593Smuzhiyun    enable_system syscalls
47*4882a593Smuzhiyun    enable_system rcu
48*4882a593Smuzhiyun    enable_system block
49*4882a593Smuzhiyun    enable_system exceptions
50*4882a593Smuzhiyun    enable_system irq
51*4882a593Smuzhiyun    enable_system net
52*4882a593Smuzhiyun    enable_system power
53*4882a593Smuzhiyun    enable_system signal
54*4882a593Smuzhiyun    enable_system sock
55*4882a593Smuzhiyun    enable_system timer
56*4882a593Smuzhiyun    enable_system thermal
57*4882a593Smuzhiyun    echo 1 > tracing_on
58*4882a593Smuzhiyun}
59*4882a593Smuzhiyun
60*4882a593Smuzhiyunother_task() {
61*4882a593Smuzhiyun    sleep .001 || usleep 1 || sleep 1
62*4882a593Smuzhiyun}
63*4882a593Smuzhiyun
64*4882a593Smuzhiyunecho 0 > options/event-fork
65*4882a593Smuzhiyun
66*4882a593Smuzhiyundo_reset
67*4882a593Smuzhiyun
68*4882a593Smuzhiyunread mypid rest < /proc/self/stat
69*4882a593Smuzhiyun
70*4882a593Smuzhiyunecho $mypid > set_event_notrace_pid
71*4882a593Smuzhiyungrep -q $mypid set_event_notrace_pid
72*4882a593Smuzhiyun
73*4882a593Smuzhiyunenable_events
74*4882a593Smuzhiyun
75*4882a593Smuzhiyunyield
76*4882a593Smuzhiyun
77*4882a593Smuzhiyunecho 0 > tracing_on
78*4882a593Smuzhiyun
79*4882a593Smuzhiyuncnt=`count_pid $mypid`
80*4882a593Smuzhiyunif [ $cnt -ne 0 ]; then
81*4882a593Smuzhiyun    fail "Filtered out task has events"
82*4882a593Smuzhiyunfi
83*4882a593Smuzhiyun
84*4882a593Smuzhiyuncnt=`count_no_pid $mypid`
85*4882a593Smuzhiyunif [ $cnt -eq 0 ]; then
86*4882a593Smuzhiyun    fail "No other events were recorded"
87*4882a593Smuzhiyunfi
88*4882a593Smuzhiyun
89*4882a593Smuzhiyundo_reset
90*4882a593Smuzhiyun
91*4882a593Smuzhiyunecho $mypid > set_event_notrace_pid
92*4882a593Smuzhiyunecho 1 > options/event-fork
93*4882a593Smuzhiyun
94*4882a593Smuzhiyunenable_events
95*4882a593Smuzhiyun
96*4882a593Smuzhiyunyield &
97*4882a593Smuzhiyunchild=$!
98*4882a593Smuzhiyunecho "child = $child"
99*4882a593Smuzhiyunwait $child
100*4882a593Smuzhiyun
101*4882a593Smuzhiyun# Be sure some other events will happen for small systems (e.g. 1 core)
102*4882a593Smuzhiyunother_task
103*4882a593Smuzhiyun
104*4882a593Smuzhiyunecho 0 > tracing_on
105*4882a593Smuzhiyun
106*4882a593Smuzhiyuncnt=`count_pid $mypid`
107*4882a593Smuzhiyunif [ $cnt -ne 0 ]; then
108*4882a593Smuzhiyun    fail "Filtered out task has events"
109*4882a593Smuzhiyunfi
110*4882a593Smuzhiyun
111*4882a593Smuzhiyuncnt=`count_pid $child`
112*4882a593Smuzhiyunif [ $cnt -ne 0 ]; then
113*4882a593Smuzhiyun    fail "Child of filtered out taskhas events"
114*4882a593Smuzhiyunfi
115*4882a593Smuzhiyun
116*4882a593Smuzhiyuncnt=`count_no_pid $mypid`
117*4882a593Smuzhiyunif [ $cnt -eq 0 ]; then
118*4882a593Smuzhiyun    fail "No other events were recorded"
119*4882a593Smuzhiyunfi
120*4882a593Smuzhiyun
121*4882a593Smuzhiyundo_reset
122*4882a593Smuzhiyun
123*4882a593Smuzhiyunexit 0
124