xref: /OK3568_Linux_fs/kernel/tools/bootconfig/scripts/ftrace.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0-only
2*4882a593Smuzhiyun
3*4882a593Smuzhiyunclear_trace() { # reset trace output
4*4882a593Smuzhiyun    echo > trace
5*4882a593Smuzhiyun}
6*4882a593Smuzhiyun
7*4882a593Smuzhiyundisable_tracing() { # stop trace recording
8*4882a593Smuzhiyun    echo 0 > tracing_on
9*4882a593Smuzhiyun}
10*4882a593Smuzhiyun
11*4882a593Smuzhiyunenable_tracing() { # start trace recording
12*4882a593Smuzhiyun    echo 1 > tracing_on
13*4882a593Smuzhiyun}
14*4882a593Smuzhiyun
15*4882a593Smuzhiyunreset_tracer() { # reset the current tracer
16*4882a593Smuzhiyun    echo nop > current_tracer
17*4882a593Smuzhiyun}
18*4882a593Smuzhiyun
19*4882a593Smuzhiyunreset_trigger_file() {
20*4882a593Smuzhiyun    # remove action triggers first
21*4882a593Smuzhiyun    grep -H ':on[^:]*(' $@ |
22*4882a593Smuzhiyun    while read line; do
23*4882a593Smuzhiyun        cmd=`echo $line | cut -f2- -d: | cut -f1 -d"["`
24*4882a593Smuzhiyun	file=`echo $line | cut -f1 -d:`
25*4882a593Smuzhiyun	echo "!$cmd" >> $file
26*4882a593Smuzhiyun    done
27*4882a593Smuzhiyun    grep -Hv ^# $@ |
28*4882a593Smuzhiyun    while read line; do
29*4882a593Smuzhiyun        cmd=`echo $line | cut -f2- -d: | cut -f1 -d"["`
30*4882a593Smuzhiyun	file=`echo $line | cut -f1 -d:`
31*4882a593Smuzhiyun	echo "!$cmd" > $file
32*4882a593Smuzhiyun    done
33*4882a593Smuzhiyun}
34*4882a593Smuzhiyun
35*4882a593Smuzhiyunreset_trigger() { # reset all current setting triggers
36*4882a593Smuzhiyun    if [ -d events/synthetic ]; then
37*4882a593Smuzhiyun        reset_trigger_file events/synthetic/*/trigger
38*4882a593Smuzhiyun    fi
39*4882a593Smuzhiyun    reset_trigger_file events/*/*/trigger
40*4882a593Smuzhiyun}
41*4882a593Smuzhiyun
42*4882a593Smuzhiyunreset_events_filter() { # reset all current setting filters
43*4882a593Smuzhiyun    grep -v ^none events/*/*/filter |
44*4882a593Smuzhiyun    while read line; do
45*4882a593Smuzhiyun	echo 0 > `echo $line | cut -f1 -d:`
46*4882a593Smuzhiyun    done
47*4882a593Smuzhiyun}
48*4882a593Smuzhiyun
49*4882a593Smuzhiyunreset_ftrace_filter() { # reset all triggers in set_ftrace_filter
50*4882a593Smuzhiyun    if [ ! -f set_ftrace_filter ]; then
51*4882a593Smuzhiyun      return 0
52*4882a593Smuzhiyun    fi
53*4882a593Smuzhiyun    echo > set_ftrace_filter
54*4882a593Smuzhiyun    grep -v '^#' set_ftrace_filter | while read t; do
55*4882a593Smuzhiyun	tr=`echo $t | cut -d: -f2`
56*4882a593Smuzhiyun	if [ "$tr" = "" ]; then
57*4882a593Smuzhiyun	    continue
58*4882a593Smuzhiyun	fi
59*4882a593Smuzhiyun	if ! grep -q "$t" set_ftrace_filter; then
60*4882a593Smuzhiyun		continue;
61*4882a593Smuzhiyun	fi
62*4882a593Smuzhiyun	name=`echo $t | cut -d: -f1 | cut -d' ' -f1`
63*4882a593Smuzhiyun	if [ $tr = "enable_event" -o $tr = "disable_event" ]; then
64*4882a593Smuzhiyun	    tr=`echo $t | cut -d: -f2-4`
65*4882a593Smuzhiyun	    limit=`echo $t | cut -d: -f5`
66*4882a593Smuzhiyun	else
67*4882a593Smuzhiyun	    tr=`echo $t | cut -d: -f2`
68*4882a593Smuzhiyun	    limit=`echo $t | cut -d: -f3`
69*4882a593Smuzhiyun	fi
70*4882a593Smuzhiyun	if [ "$limit" != "unlimited" ]; then
71*4882a593Smuzhiyun	    tr="$tr:$limit"
72*4882a593Smuzhiyun	fi
73*4882a593Smuzhiyun	echo "!$name:$tr" > set_ftrace_filter
74*4882a593Smuzhiyun    done
75*4882a593Smuzhiyun}
76*4882a593Smuzhiyun
77*4882a593Smuzhiyundisable_events() {
78*4882a593Smuzhiyun    echo 0 > events/enable
79*4882a593Smuzhiyun}
80*4882a593Smuzhiyun
81*4882a593Smuzhiyunclear_synthetic_events() { # reset all current synthetic events
82*4882a593Smuzhiyun    grep -v ^# synthetic_events |
83*4882a593Smuzhiyun    while read line; do
84*4882a593Smuzhiyun        echo "!$line" >> synthetic_events
85*4882a593Smuzhiyun    done
86*4882a593Smuzhiyun}
87*4882a593Smuzhiyun
88*4882a593Smuzhiyuninitialize_ftrace() { # Reset ftrace to initial-state
89*4882a593Smuzhiyun# As the initial state, ftrace will be set to nop tracer,
90*4882a593Smuzhiyun# no events, no triggers, no filters, no function filters,
91*4882a593Smuzhiyun# no probes, and tracing on.
92*4882a593Smuzhiyun    disable_tracing
93*4882a593Smuzhiyun    reset_tracer
94*4882a593Smuzhiyun    reset_trigger
95*4882a593Smuzhiyun    reset_events_filter
96*4882a593Smuzhiyun    reset_ftrace_filter
97*4882a593Smuzhiyun    disable_events
98*4882a593Smuzhiyun    [ -f set_event_pid ] && echo > set_event_pid
99*4882a593Smuzhiyun    [ -f set_ftrace_pid ] && echo > set_ftrace_pid
100*4882a593Smuzhiyun    [ -f set_ftrace_notrace ] && echo > set_ftrace_notrace
101*4882a593Smuzhiyun    [ -f set_graph_function ] && echo | tee set_graph_*
102*4882a593Smuzhiyun    [ -f stack_trace_filter ] && echo > stack_trace_filter
103*4882a593Smuzhiyun    [ -f kprobe_events ] && echo > kprobe_events
104*4882a593Smuzhiyun    [ -f uprobe_events ] && echo > uprobe_events
105*4882a593Smuzhiyun    [ -f synthetic_events ] && echo > synthetic_events
106*4882a593Smuzhiyun    [ -f snapshot ] && echo 0 > snapshot
107*4882a593Smuzhiyun    clear_trace
108*4882a593Smuzhiyun    enable_tracing
109*4882a593Smuzhiyun}
110