116bcd0f5SXiao Yangcheck_filter_file() { # check filter file introduced by dynamic ftrace 216bcd0f5SXiao Yang if [ ! -f "$1" ]; then 316bcd0f5SXiao Yang echo "$1 not found? Is dynamic ftrace not set?" 416bcd0f5SXiao Yang exit_unsupported 516bcd0f5SXiao Yang fi 616bcd0f5SXiao Yang} 7ee3988c7SSteven Rostedt (Red Hat) 8ee3988c7SSteven Rostedt (Red Hat)clear_trace() { # reset trace output 9ee3988c7SSteven Rostedt (Red Hat) echo > trace 10ee3988c7SSteven Rostedt (Red Hat)} 11ee3988c7SSteven Rostedt (Red Hat) 12ee3988c7SSteven Rostedt (Red Hat)disable_tracing() { # stop trace recording 13ee3988c7SSteven Rostedt (Red Hat) echo 0 > tracing_on 14ee3988c7SSteven Rostedt (Red Hat)} 15ee3988c7SSteven Rostedt (Red Hat) 16ee3988c7SSteven Rostedt (Red Hat)enable_tracing() { # start trace recording 17ee3988c7SSteven Rostedt (Red Hat) echo 1 > tracing_on 18ee3988c7SSteven Rostedt (Red Hat)} 19ee3988c7SSteven Rostedt (Red Hat) 20ee3988c7SSteven Rostedt (Red Hat)reset_tracer() { # reset the current tracer 21ee3988c7SSteven Rostedt (Red Hat) echo nop > current_tracer 22ee3988c7SSteven Rostedt (Red Hat)} 23cfa0963dSMasami Hiramatsu 24756b56a9SSteven Rostedt (VMware)reset_trigger_file() { 25756b56a9SSteven Rostedt (VMware) # remove action triggers first 26756b56a9SSteven Rostedt (VMware) grep -H ':on[^:]*(' $@ | 27cfa0963dSMasami Hiramatsu while read line; do 28922a418dSSteven Rostedt (VMware) cmd=`echo $line | cut -f2- -d: | cut -f1 -d"["` 29756b56a9SSteven Rostedt (VMware) file=`echo $line | cut -f1 -d:` 30756b56a9SSteven Rostedt (VMware) echo "!$cmd" >> $file 31cfa0963dSMasami Hiramatsu done 32756b56a9SSteven Rostedt (VMware) grep -Hv ^# $@ | 33756b56a9SSteven Rostedt (VMware) while read line; do 34922a418dSSteven Rostedt (VMware) cmd=`echo $line | cut -f2- -d: | cut -f1 -d"["` 35756b56a9SSteven Rostedt (VMware) file=`echo $line | cut -f1 -d:` 36756b56a9SSteven Rostedt (VMware) echo "!$cmd" > $file 37756b56a9SSteven Rostedt (VMware) done 38756b56a9SSteven Rostedt (VMware)} 39756b56a9SSteven Rostedt (VMware) 40756b56a9SSteven Rostedt (VMware)reset_trigger() { # reset all current setting triggers 41756b56a9SSteven Rostedt (VMware) if [ -d events/synthetic ]; then 42756b56a9SSteven Rostedt (VMware) reset_trigger_file events/synthetic/*/trigger 43756b56a9SSteven Rostedt (VMware) fi 44756b56a9SSteven Rostedt (VMware) reset_trigger_file events/*/*/trigger 45cfa0963dSMasami Hiramatsu} 46cfa0963dSMasami Hiramatsu 47131f840dSMasami Hiramatsureset_events_filter() { # reset all current setting filters 48131f840dSMasami Hiramatsu grep -v ^none events/*/*/filter | 49131f840dSMasami Hiramatsu while read line; do 50131f840dSMasami Hiramatsu echo 0 > `echo $line | cut -f1 -d:` 51131f840dSMasami Hiramatsu done 52131f840dSMasami Hiramatsu} 53131f840dSMasami Hiramatsu 548e5e19c1SSteven Rostedt (VMware)reset_ftrace_filter() { # reset all triggers in set_ftrace_filter 55fd1baf6cSMasami Hiramatsu if [ ! -f set_ftrace_filter ]; then 56fd1baf6cSMasami Hiramatsu return 0 57fd1baf6cSMasami Hiramatsu fi 588e5e19c1SSteven Rostedt (VMware) echo > set_ftrace_filter 598e5e19c1SSteven Rostedt (VMware) grep -v '^#' set_ftrace_filter | while read t; do 608e5e19c1SSteven Rostedt (VMware) tr=`echo $t | cut -d: -f2` 61d2ffb8d3SNaveen N. Rao if [ "$tr" = "" ]; then 628e5e19c1SSteven Rostedt (VMware) continue 638e5e19c1SSteven Rostedt (VMware) fi 640787ce33SSteven Rostedt (VMware) if ! grep -q "$t" set_ftrace_filter; then 650787ce33SSteven Rostedt (VMware) continue; 660787ce33SSteven Rostedt (VMware) fi 67df9d36d9SSteven Rostedt (VMware) name=`echo $t | cut -d: -f1 | cut -d' ' -f1` 68d2ffb8d3SNaveen N. Rao if [ $tr = "enable_event" -o $tr = "disable_event" ]; then 69df9d36d9SSteven Rostedt (VMware) tr=`echo $t | cut -d: -f2-4` 708e5e19c1SSteven Rostedt (VMware) limit=`echo $t | cut -d: -f5` 718e5e19c1SSteven Rostedt (VMware) else 72df9d36d9SSteven Rostedt (VMware) tr=`echo $t | cut -d: -f2` 738e5e19c1SSteven Rostedt (VMware) limit=`echo $t | cut -d: -f3` 748e5e19c1SSteven Rostedt (VMware) fi 758e5e19c1SSteven Rostedt (VMware) if [ "$limit" != "unlimited" ]; then 768e5e19c1SSteven Rostedt (VMware) tr="$tr:$limit" 778e5e19c1SSteven Rostedt (VMware) fi 78df9d36d9SSteven Rostedt (VMware) echo "!$name:$tr" > set_ftrace_filter 798e5e19c1SSteven Rostedt (VMware) done 808e5e19c1SSteven Rostedt (VMware)} 818e5e19c1SSteven Rostedt (VMware) 82131f840dSMasami Hiramatsudisable_events() { 83131f840dSMasami Hiramatsu echo 0 > events/enable 84131f840dSMasami Hiramatsu} 85131f840dSMasami Hiramatsu 86f06eec4dSRajvi Jingarclear_synthetic_events() { # reset all current synthetic events 87f06eec4dSRajvi Jingar grep -v ^# synthetic_events | 88f06eec4dSRajvi Jingar while read line; do 89f06eec4dSRajvi Jingar echo "!$line" >> synthetic_events 90f06eec4dSRajvi Jingar done 91f06eec4dSRajvi Jingar} 92f06eec4dSRajvi Jingar 93131f840dSMasami Hiramatsuinitialize_ftrace() { # Reset ftrace to initial-state 94131f840dSMasami Hiramatsu# As the initial state, ftrace will be set to nop tracer, 95131f840dSMasami Hiramatsu# no events, no triggers, no filters, no function filters, 96131f840dSMasami Hiramatsu# no probes, and tracing on. 97131f840dSMasami Hiramatsu disable_tracing 98131f840dSMasami Hiramatsu reset_tracer 99131f840dSMasami Hiramatsu reset_trigger 100131f840dSMasami Hiramatsu reset_events_filter 1017590472eSMasami Hiramatsu reset_ftrace_filter 102131f840dSMasami Hiramatsu disable_events 1036e55f320SSteven Rostedt (VMware) [ -f set_event_pid ] && echo > set_event_pid 1046e55f320SSteven Rostedt (VMware) [ -f set_ftrace_pid ] && echo > set_ftrace_pid 105fd1baf6cSMasami Hiramatsu [ -f set_ftrace_notrace ] && echo > set_ftrace_notrace 106131f840dSMasami Hiramatsu [ -f set_graph_function ] && echo | tee set_graph_* 107131f840dSMasami Hiramatsu [ -f stack_trace_filter ] && echo > stack_trace_filter 108131f840dSMasami Hiramatsu [ -f kprobe_events ] && echo > kprobe_events 109131f840dSMasami Hiramatsu [ -f uprobe_events ] && echo > uprobe_events 1107590472eSMasami Hiramatsu [ -f synthetic_events ] && echo > synthetic_events 1117590472eSMasami Hiramatsu [ -f snapshot ] && echo 0 > snapshot 1127590472eSMasami Hiramatsu clear_trace 113131f840dSMasami Hiramatsu enable_tracing 114131f840dSMasami Hiramatsu} 115cec3adf5SMasami Hiramatsu 116cec3adf5SMasami HiramatsuLOCALHOST=127.0.0.1 117cec3adf5SMasami Hiramatsu 118cec3adf5SMasami Hiramatsuyield() { 119cec3adf5SMasami Hiramatsu ping $LOCALHOST -c 1 || sleep .001 || usleep 1 || sleep 1 120cec3adf5SMasami Hiramatsu} 121c5e4114fSTom Zanussi 122*8e923a21SMasami Hiramatsu# Since probe event command may include backslash, explicitly use printf "%s" 123*8e923a21SMasami Hiramatsu# to NOT interpret it. 124c5e4114fSTom Zanussiftrace_errlog_check() { # err-prefix command-with-error-pos-by-^ command-file 125*8e923a21SMasami Hiramatsu pos=$(printf "%s" "${2%^*}" | wc -c) # error position 126*8e923a21SMasami Hiramatsu command=$(printf "%s" "$2" | tr -d ^) 127c5e4114fSTom Zanussi echo "Test command: $command" 128c5e4114fSTom Zanussi echo > error_log 129*8e923a21SMasami Hiramatsu (! printf "%s" "$command" >> "$3" ) 2> /dev/null 130c5e4114fSTom Zanussi grep "$1: error:" -A 3 error_log 131c5e4114fSTom Zanussi N=$(tail -n 1 error_log | wc -c) 132c5e4114fSTom Zanussi # " Command: " and "^\n" => 13 133c5e4114fSTom Zanussi test $(expr 13 + $pos) -eq $N 134c5e4114fSTom Zanussi} 135