Linux-libre 5.7.5-gnu
[librecmc/linux-libre.git] / tools / testing / selftests / ftrace / test.d / ftrace / func_event_triggers.tc
1 #!/bin/sh
2 # SPDX-License-Identifier: GPL-2.0
3 # description: ftrace - test for function event triggers
4 # flags: instance
5 #
6 # Ftrace allows to add triggers to functions, such as enabling or disabling
7 # tracing, enabling or disabling trace events, or recording a stack trace
8 # within the ring buffer.
9 #
10 # This test is designed to test event triggers
11 #
12
13 # The triggers are set within the set_ftrace_filter file
14 check_filter_file set_ftrace_filter
15
16 do_reset() {
17     reset_ftrace_filter
18     reset_tracer
19     disable_events
20     clear_trace
21     enable_tracing
22 }
23
24 fail() { # mesg
25     echo $1
26     exit_fail
27 }
28
29 SLEEP_TIME=".1"
30
31 echo "Testing function probes with events:"
32
33 EVENT="sched:sched_switch"
34 EVENT_ENABLE="events/sched/sched_switch/enable"
35
36 cnt_trace() {
37     grep -v '^#' trace | wc -l
38 }
39
40 test_event_enabled() {
41     val=$1
42
43     e=`cat $EVENT_ENABLE`
44     if [ "$e" != $val ]; then
45         fail "Expected $val but found $e"
46     fi
47 }
48
49 run_enable_disable() {
50     enable=$1                   # enable
51     Enable=$2                   # Enable
52     check_disable=$3            # 0
53     check_enable_star=$4        # 1*
54     check_disable_star=$5       # 0*
55
56     cnt=`cnt_trace`
57     if [ $cnt -ne 0 ]; then
58         fail "Found junk in trace file"
59     fi
60
61     echo "$Enable event all the time"
62
63     echo $check_disable > $EVENT_ENABLE
64     sleep $SLEEP_TIME
65
66     test_event_enabled $check_disable
67
68     echo "schedule:${enable}_event:$EVENT" > set_ftrace_filter
69     if [ -d ../../instances ]; then # Check instances
70         cur=`cat set_ftrace_filter`
71         top=`cat ../../set_ftrace_filter`
72         if [ "$cur" = "$top" ]; then
73             echo "This kernel is too old to support per instance filter"
74             reset_ftrace_filter
75             exit_unsupported
76         fi
77     fi
78
79     echo " make sure it works 5 times"
80
81     for i in `seq 5`; do
82         sleep $SLEEP_TIME
83         echo "  test $i"
84         test_event_enabled $check_enable_star
85
86         echo $check_disable > $EVENT_ENABLE
87     done
88     sleep $SLEEP_TIME
89     echo " make sure it's still works"
90     test_event_enabled $check_enable_star
91
92     reset_ftrace_filter
93
94     echo " make sure it only works 3 times"
95
96     echo $check_disable > $EVENT_ENABLE
97     sleep $SLEEP_TIME
98
99     echo "schedule:${enable}_event:$EVENT:3" > set_ftrace_filter
100
101     for i in `seq 3`; do
102         sleep $SLEEP_TIME
103         echo "  test $i"
104         test_event_enabled $check_enable_star
105
106         echo $check_disable > $EVENT_ENABLE
107     done
108
109     sleep $SLEEP_TIME
110     echo " make sure it stop working"
111     test_event_enabled $check_disable_star
112
113     do_reset
114 }
115
116 run_enable_disable enable Enable 0 "1*" "0*"
117 run_enable_disable disable Disable 1 "0*" "1*"