1clear_trace() { # reset trace output 2 echo > trace 3} 4 5disable_tracing() { # stop trace recording 6 echo 0 > tracing_on 7} 8 9enable_tracing() { # start trace recording 10 echo 1 > tracing_on 11} 12 13reset_tracer() { # reset the current tracer 14 echo nop > current_tracer 15} 16 17reset_trigger_file() { 18 # remove action triggers first 19 grep -H ':on[^:]*(' $@ | 20 while read line; do 21 cmd=`echo $line | cut -f2- -d: | cut -f1 -d"["` 22 file=`echo $line | cut -f1 -d:` 23 echo "!$cmd" >> $file 24 done 25 grep -Hv ^# $@ | 26 while read line; do 27 cmd=`echo $line | cut -f2- -d: | cut -f1 -d"["` 28 file=`echo $line | cut -f1 -d:` 29 echo "!$cmd" > $file 30 done 31} 32 33reset_trigger() { # reset all current setting triggers 34 if [ -d events/synthetic ]; then 35 reset_trigger_file events/synthetic/*/trigger 36 fi 37 reset_trigger_file events/*/*/trigger 38} 39 40reset_events_filter() { # reset all current setting filters 41 grep -v ^none events/*/*/filter | 42 while read line; do 43 echo 0 > `echo $line | cut -f1 -d:` 44 done 45} 46 47reset_ftrace_filter() { # reset all triggers in set_ftrace_filter 48 if [ ! -f set_ftrace_filter ]; then 49 return 0 50 fi 51 echo > set_ftrace_filter 52 grep -v '^#' set_ftrace_filter | while read t; do 53 tr=`echo $t | cut -d: -f2` 54 if [ "$tr" = "" ]; then 55 continue 56 fi 57 if ! grep -q "$t" set_ftrace_filter; then 58 continue; 59 fi 60 name=`echo $t | cut -d: -f1 | cut -d' ' -f1` 61 if [ $tr = "enable_event" -o $tr = "disable_event" ]; then 62 tr=`echo $t | cut -d: -f2-4` 63 limit=`echo $t | cut -d: -f5` 64 else 65 tr=`echo $t | cut -d: -f2` 66 limit=`echo $t | cut -d: -f3` 67 fi 68 if [ "$limit" != "unlimited" ]; then 69 tr="$tr:$limit" 70 fi 71 echo "!$name:$tr" > set_ftrace_filter 72 done 73} 74 75disable_events() { 76 echo 0 > events/enable 77} 78 79clear_synthetic_events() { # reset all current synthetic events 80 grep -v ^# synthetic_events | 81 while read line; do 82 echo "!$line" >> synthetic_events 83 done 84} 85 86clear_dynamic_events() { # reset all current dynamic events 87 again=1 88 stop=1 89 # loop mulitple times as some events require other to be removed first 90 while [ $again -eq 1 ]; do 91 stop=$((stop+1)) 92 # Prevent infinite loops 93 if [ $stop -gt 10 ]; then 94 break; 95 fi 96 again=2 97 grep -v '^#' dynamic_events| 98 while read line; do 99 del=`echo $line | sed -e 's/^.\([^ ]*\).*/-\1/'` 100 if ! echo "$del" >> dynamic_events; then 101 again=1 102 fi 103 done 104 done 105} 106 107initialize_ftrace() { # Reset ftrace to initial-state 108# As the initial state, ftrace will be set to nop tracer, 109# no events, no triggers, no filters, no function filters, 110# no probes, and tracing on. 111 disable_tracing 112 reset_tracer 113 reset_trigger 114 reset_events_filter 115 reset_ftrace_filter 116 disable_events 117 clear_dynamic_events 118 [ -f set_event_pid ] && echo > set_event_pid 119 [ -f set_ftrace_pid ] && echo > set_ftrace_pid 120 [ -f set_ftrace_notrace ] && echo > set_ftrace_notrace 121 [ -f set_graph_function ] && echo | tee set_graph_* 122 [ -f stack_trace_filter ] && echo > stack_trace_filter 123 [ -f kprobe_events ] && echo > kprobe_events 124 [ -f uprobe_events ] && echo > uprobe_events 125 [ -f synthetic_events ] && echo > synthetic_events 126 [ -f snapshot ] && echo 0 > snapshot 127 clear_trace 128 enable_tracing 129} 130 131check_requires() { # Check required files and tracers 132 for i in "$@" ; do 133 r=${i%:README} 134 t=${i%:tracer} 135 if [ $t != $i ]; then 136 if ! grep -wq $t available_tracers ; then 137 echo "Required tracer $t is not configured." 138 exit_unsupported 139 fi 140 elif [ "$r" != "$i" ]; then 141 if ! grep -Fq "$r" README ; then 142 echo "Required feature pattern \"$r\" is not in README." 143 exit_unsupported 144 fi 145 elif [ ! -e $i ]; then 146 echo "Required feature interface $i doesn't exist." 147 exit_unsupported 148 fi 149 done 150} 151 152LOCALHOST=127.0.0.1 153 154yield() { 155 ping $LOCALHOST -c 1 || sleep .001 || usleep 1 || sleep 1 156} 157 158# The fork function in the kernel was renamed from "_do_fork" to 159# "kernel_fork". As older tests should still work with older kernels 160# as well as newer kernels, check which version of fork is used on this 161# kernel so that the tests can use the fork function for the running kernel. 162FUNCTION_FORK=`(if grep '\bkernel_clone\b' /proc/kallsyms > /dev/null; then 163 echo kernel_clone; else echo '_do_fork'; fi)` 164 165# Since probe event command may include backslash, explicitly use printf "%s" 166# to NOT interpret it. 167ftrace_errlog_check() { # err-prefix command-with-error-pos-by-^ command-file 168 pos=$(printf "%s" "${2%^*}" | wc -c) # error position 169 command=$(printf "%s" "$2" | tr -d ^) 170 echo "Test command: $command" 171 echo > error_log 172 (! printf "%s" "$command" >> "$3" ) 2> /dev/null 173 grep "$1: error:" -A 3 error_log 174 N=$(tail -n 1 error_log | wc -c) 175 # " Command: " and "^\n" => 13 176 test $(expr 13 + $pos) -eq $N 177} 178