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