cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

functions (5387B)


      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
    128# Stop tracing while reading the trace file by default, to prevent
    129# the test results while checking it and to avoid taking a long time
    130# to check the result.
    131    [ -f options/pause-on-trace ] && echo 1 > options/pause-on-trace
    132
    133    clear_trace
    134    enable_tracing
    135}
    136
    137finish_ftrace() {
    138    initialize_ftrace
    139# And recover it to default.
    140    [ -f options/pause-on-trace ] && echo 0 > options/pause-on-trace
    141}
    142
    143check_requires() { # Check required files and tracers
    144    for i in "$@" ; do
    145        r=${i%:README}
    146        t=${i%:tracer}
    147        if [ $t != $i ]; then
    148            if ! grep -wq $t available_tracers ; then
    149                echo "Required tracer $t is not configured."
    150                exit_unsupported
    151            fi
    152        elif [ "$r" != "$i" ]; then
    153            if ! grep -Fq "$r" README ; then
    154                echo "Required feature pattern \"$r\" is not in README."
    155                exit_unsupported
    156            fi
    157        elif [ ! -e $i ]; then
    158            echo "Required feature interface $i doesn't exist."
    159            exit_unsupported
    160        fi
    161    done
    162}
    163
    164LOCALHOST=127.0.0.1
    165
    166yield() {
    167    ping $LOCALHOST -c 1 || sleep .001 || usleep 1 || sleep 1
    168}
    169
    170# The fork function in the kernel was renamed from "_do_fork" to
    171# "kernel_fork". As older tests should still work with older kernels
    172# as well as newer kernels, check which version of fork is used on this
    173# kernel so that the tests can use the fork function for the running kernel.
    174FUNCTION_FORK=`(if grep '\bkernel_clone\b' /proc/kallsyms > /dev/null; then
    175                echo kernel_clone; else echo '_do_fork'; fi)`
    176
    177# Since probe event command may include backslash, explicitly use printf "%s"
    178# to NOT interpret it.
    179ftrace_errlog_check() { # err-prefix command-with-error-pos-by-^ command-file
    180    pos=$(printf "%s" "${2%^*}" | wc -c) # error position
    181    command=$(printf "%s" "$2" | tr -d ^)
    182    echo "Test command: $command"
    183    echo > error_log
    184    (! printf "%s" "$command" >> "$3" ) 2> /dev/null
    185    grep "$1: error:" -A 3 error_log
    186    N=$(tail -n 1 error_log | wc -c)
    187    # "  Command: " and "^\n" => 13
    188    test $(expr 13 + $pos) -eq $N
    189}