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