18c2ecf20Sopenharmony_ciclear_trace() { # reset trace output
28c2ecf20Sopenharmony_ci    echo > trace
38c2ecf20Sopenharmony_ci}
48c2ecf20Sopenharmony_ci
58c2ecf20Sopenharmony_cidisable_tracing() { # stop trace recording
68c2ecf20Sopenharmony_ci    echo 0 > tracing_on
78c2ecf20Sopenharmony_ci}
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_cienable_tracing() { # start trace recording
108c2ecf20Sopenharmony_ci    echo 1 > tracing_on
118c2ecf20Sopenharmony_ci}
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_cireset_tracer() { # reset the current tracer
148c2ecf20Sopenharmony_ci    echo nop > current_tracer
158c2ecf20Sopenharmony_ci}
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_cireset_trigger_file() {
188c2ecf20Sopenharmony_ci    # remove action triggers first
198c2ecf20Sopenharmony_ci    grep -H ':on[^:]*(' $@ |
208c2ecf20Sopenharmony_ci    while read line; do
218c2ecf20Sopenharmony_ci        cmd=`echo $line | cut -f2- -d: | cut -f1 -d"["`
228c2ecf20Sopenharmony_ci	file=`echo $line | cut -f1 -d:`
238c2ecf20Sopenharmony_ci	echo "!$cmd" >> $file
248c2ecf20Sopenharmony_ci    done
258c2ecf20Sopenharmony_ci    grep -Hv ^# $@ |
268c2ecf20Sopenharmony_ci    while read line; do
278c2ecf20Sopenharmony_ci        cmd=`echo $line | cut -f2- -d: | cut -f1 -d"["`
288c2ecf20Sopenharmony_ci	file=`echo $line | cut -f1 -d:`
298c2ecf20Sopenharmony_ci	echo "!$cmd" > $file
308c2ecf20Sopenharmony_ci    done
318c2ecf20Sopenharmony_ci}
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_cireset_trigger() { # reset all current setting triggers
348c2ecf20Sopenharmony_ci    if [ -d events/synthetic ]; then
358c2ecf20Sopenharmony_ci        reset_trigger_file events/synthetic/*/trigger
368c2ecf20Sopenharmony_ci    fi
378c2ecf20Sopenharmony_ci    reset_trigger_file events/*/*/trigger
388c2ecf20Sopenharmony_ci}
398c2ecf20Sopenharmony_ci
408c2ecf20Sopenharmony_cireset_events_filter() { # reset all current setting filters
418c2ecf20Sopenharmony_ci    grep -v ^none events/*/*/filter |
428c2ecf20Sopenharmony_ci    while read line; do
438c2ecf20Sopenharmony_ci	echo 0 > `echo $line | cut -f1 -d:`
448c2ecf20Sopenharmony_ci    done
458c2ecf20Sopenharmony_ci}
468c2ecf20Sopenharmony_ci
478c2ecf20Sopenharmony_cireset_ftrace_filter() { # reset all triggers in set_ftrace_filter
488c2ecf20Sopenharmony_ci    if [ ! -f set_ftrace_filter ]; then
498c2ecf20Sopenharmony_ci      return 0
508c2ecf20Sopenharmony_ci    fi
518c2ecf20Sopenharmony_ci    echo > set_ftrace_filter
528c2ecf20Sopenharmony_ci    grep -v '^#' set_ftrace_filter | while read t; do
538c2ecf20Sopenharmony_ci	tr=`echo $t | cut -d: -f2`
548c2ecf20Sopenharmony_ci	if [ "$tr" = "" ]; then
558c2ecf20Sopenharmony_ci	    continue
568c2ecf20Sopenharmony_ci	fi
578c2ecf20Sopenharmony_ci	if ! grep -q "$t" set_ftrace_filter; then
588c2ecf20Sopenharmony_ci		continue;
598c2ecf20Sopenharmony_ci	fi
608c2ecf20Sopenharmony_ci	name=`echo $t | cut -d: -f1 | cut -d' ' -f1`
618c2ecf20Sopenharmony_ci	if [ $tr = "enable_event" -o $tr = "disable_event" ]; then
628c2ecf20Sopenharmony_ci	    tr=`echo $t | cut -d: -f2-4`
638c2ecf20Sopenharmony_ci	    limit=`echo $t | cut -d: -f5`
648c2ecf20Sopenharmony_ci	else
658c2ecf20Sopenharmony_ci	    tr=`echo $t | cut -d: -f2`
668c2ecf20Sopenharmony_ci	    limit=`echo $t | cut -d: -f3`
678c2ecf20Sopenharmony_ci	fi
688c2ecf20Sopenharmony_ci	if [ "$limit" != "unlimited" ]; then
698c2ecf20Sopenharmony_ci	    tr="$tr:$limit"
708c2ecf20Sopenharmony_ci	fi
718c2ecf20Sopenharmony_ci	echo "!$name:$tr" > set_ftrace_filter
728c2ecf20Sopenharmony_ci    done
738c2ecf20Sopenharmony_ci}
748c2ecf20Sopenharmony_ci
758c2ecf20Sopenharmony_cidisable_events() {
768c2ecf20Sopenharmony_ci    echo 0 > events/enable
778c2ecf20Sopenharmony_ci}
788c2ecf20Sopenharmony_ci
798c2ecf20Sopenharmony_ciclear_synthetic_events() { # reset all current synthetic events
808c2ecf20Sopenharmony_ci    grep -v ^# synthetic_events |
818c2ecf20Sopenharmony_ci    while read line; do
828c2ecf20Sopenharmony_ci        echo "!$line" >> synthetic_events
838c2ecf20Sopenharmony_ci    done
848c2ecf20Sopenharmony_ci}
858c2ecf20Sopenharmony_ci
868c2ecf20Sopenharmony_ciinitialize_ftrace() { # Reset ftrace to initial-state
878c2ecf20Sopenharmony_ci# As the initial state, ftrace will be set to nop tracer,
888c2ecf20Sopenharmony_ci# no events, no triggers, no filters, no function filters,
898c2ecf20Sopenharmony_ci# no probes, and tracing on.
908c2ecf20Sopenharmony_ci    disable_tracing
918c2ecf20Sopenharmony_ci    reset_tracer
928c2ecf20Sopenharmony_ci    reset_trigger
938c2ecf20Sopenharmony_ci    reset_events_filter
948c2ecf20Sopenharmony_ci    reset_ftrace_filter
958c2ecf20Sopenharmony_ci    disable_events
968c2ecf20Sopenharmony_ci    [ -f set_event_pid ] && echo > set_event_pid
978c2ecf20Sopenharmony_ci    [ -f set_ftrace_pid ] && echo > set_ftrace_pid
988c2ecf20Sopenharmony_ci    [ -f set_ftrace_notrace ] && echo > set_ftrace_notrace
998c2ecf20Sopenharmony_ci    [ -f set_graph_function ] && echo | tee set_graph_*
1008c2ecf20Sopenharmony_ci    [ -f stack_trace_filter ] && echo > stack_trace_filter
1018c2ecf20Sopenharmony_ci    [ -f kprobe_events ] && echo > kprobe_events
1028c2ecf20Sopenharmony_ci    [ -f uprobe_events ] && echo > uprobe_events
1038c2ecf20Sopenharmony_ci    [ -f synthetic_events ] && echo > synthetic_events
1048c2ecf20Sopenharmony_ci    [ -f snapshot ] && echo 0 > snapshot
1058c2ecf20Sopenharmony_ci    clear_trace
1068c2ecf20Sopenharmony_ci    enable_tracing
1078c2ecf20Sopenharmony_ci}
1088c2ecf20Sopenharmony_ci
1098c2ecf20Sopenharmony_cicheck_requires() { # Check required files and tracers
1108c2ecf20Sopenharmony_ci    for i in "$@" ; do
1118c2ecf20Sopenharmony_ci        r=${i%:README}
1128c2ecf20Sopenharmony_ci        t=${i%:tracer}
1138c2ecf20Sopenharmony_ci        if [ $t != $i ]; then
1148c2ecf20Sopenharmony_ci            if ! grep -wq $t available_tracers ; then
1158c2ecf20Sopenharmony_ci                echo "Required tracer $t is not configured."
1168c2ecf20Sopenharmony_ci                exit_unsupported
1178c2ecf20Sopenharmony_ci            fi
1188c2ecf20Sopenharmony_ci        elif [ "$r" != "$i" ]; then
1198c2ecf20Sopenharmony_ci            if ! grep -Fq "$r" README ; then
1208c2ecf20Sopenharmony_ci                echo "Required feature pattern \"$r\" is not in README."
1218c2ecf20Sopenharmony_ci                exit_unsupported
1228c2ecf20Sopenharmony_ci            fi
1238c2ecf20Sopenharmony_ci        elif [ ! -e $i ]; then
1248c2ecf20Sopenharmony_ci            echo "Required feature interface $i doesn't exist."
1258c2ecf20Sopenharmony_ci            exit_unsupported
1268c2ecf20Sopenharmony_ci        fi
1278c2ecf20Sopenharmony_ci    done
1288c2ecf20Sopenharmony_ci}
1298c2ecf20Sopenharmony_ci
1308c2ecf20Sopenharmony_ciLOCALHOST=127.0.0.1
1318c2ecf20Sopenharmony_ci
1328c2ecf20Sopenharmony_ciyield() {
1338c2ecf20Sopenharmony_ci    ping $LOCALHOST -c 1 || sleep .001 || usleep 1 || sleep 1
1348c2ecf20Sopenharmony_ci}
1358c2ecf20Sopenharmony_ci
1368c2ecf20Sopenharmony_ci# The fork function in the kernel was renamed from "_do_fork" to
1378c2ecf20Sopenharmony_ci# "kernel_fork". As older tests should still work with older kernels
1388c2ecf20Sopenharmony_ci# as well as newer kernels, check which version of fork is used on this
1398c2ecf20Sopenharmony_ci# kernel so that the tests can use the fork function for the running kernel.
1408c2ecf20Sopenharmony_ciFUNCTION_FORK=`(if grep '\bkernel_clone\b' /proc/kallsyms > /dev/null; then
1418c2ecf20Sopenharmony_ci                echo kernel_clone; else echo '_do_fork'; fi)`
1428c2ecf20Sopenharmony_ci
1438c2ecf20Sopenharmony_ci# Since probe event command may include backslash, explicitly use printf "%s"
1448c2ecf20Sopenharmony_ci# to NOT interpret it.
1458c2ecf20Sopenharmony_ciftrace_errlog_check() { # err-prefix command-with-error-pos-by-^ command-file
1468c2ecf20Sopenharmony_ci    pos=$(printf "%s" "${2%^*}" | wc -c) # error position
1478c2ecf20Sopenharmony_ci    command=$(printf "%s" "$2" | tr -d ^)
1488c2ecf20Sopenharmony_ci    echo "Test command: $command"
1498c2ecf20Sopenharmony_ci    echo > error_log
1508c2ecf20Sopenharmony_ci    (! printf "%s" "$command" >> "$3" ) 2> /dev/null
1518c2ecf20Sopenharmony_ci    grep "$1: error:" -A 3 error_log
1528c2ecf20Sopenharmony_ci    N=$(tail -n 1 error_log | wc -c)
1538c2ecf20Sopenharmony_ci    # "  Command: " and "^\n" => 13
1548c2ecf20Sopenharmony_ci    test $(expr 13 + $pos) -eq $N
1558c2ecf20Sopenharmony_ci}
156