#!/bin/sh
# description: ftrace - test for function traceon/off triggers
# flags: instance
#
# Ftrace allows to add triggers to functions, such as enabling or disabling
# tracing, enabling or disabling trace events, or recording a stack trace
# within the ring buffer.
#
# This test is designed to test enabling and disabling tracing triggers
#

# The triggers are set within the set_ftrace_filter file
if [ ! -f set_ftrace_filter ]; then
    echo "set_ftrace_filter not found? Is dynamic ftrace not set?"
    exit_unsupported
fi

do_reset() {
    reset_ftrace_filter
    reset_tracer
    disable_events
    clear_trace
    enable_tracing
}

fail() { # mesg
    do_reset
    echo $1
    exit $FAIL
}

SLEEP_TIME=".1"

do_reset

echo "Testing function probes with enabling disabling tracing:"

cnt_trace() {
    grep -v '^#' trace | wc -l
}

echo '** DISABLE TRACING'
disable_tracing
clear_trace

cnt=`cnt_trace`
if [ $cnt -ne 0 ]; then
    fail "Found junk in trace"
fi


echo '** ENABLE EVENTS'

echo 1 > events/enable

echo '** ENABLE TRACING'
enable_tracing

cnt=`cnt_trace`
if [ $cnt -eq 0 ]; then
   fail "Nothing found in trace"
fi

# powerpc uses .schedule
func="schedule"
available_file=available_filter_functions
if [ -d ../../instances -a -f ../../available_filter_functions ]; then
   available_file=../../available_filter_functions
fi
x=`grep '^\.schedule$' available_filter_functions | wc -l`
if [ "$x" -eq 1 ]; then
   func=".schedule"
fi

echo '** SET TRACEOFF'

echo "$func:traceoff" > set_ftrace_filter
if [ -d ../../instances ]; then # Check instances
    cur=`cat set_ftrace_filter`
    top=`cat ../../set_ftrace_filter`
    if [ "$cur" = "$top" ]; then
	echo "This kernel is too old to support per instance filter"
	reset_ftrace_filter
	exit_unsupported
    fi
fi

cnt=`grep schedule set_ftrace_filter | wc -l`
if [ $cnt -ne 1 ]; then
   fail "Did not find traceoff trigger"
fi

cnt=`cnt_trace`
sleep $SLEEP_TIME
cnt2=`cnt_trace`

if [ $cnt -ne $cnt2 ]; then
   fail "Tracing is not stopped"
fi

on=`cat tracing_on`
if [ $on != "0" ]; then
    fail "Tracing is not off"
fi

csum1=`md5sum trace`
sleep $SLEEP_TIME
csum2=`md5sum trace`

if [ "$csum1" != "$csum2" ]; then
    fail "Tracing file is still changing"
fi

clear_trace

cnt=`cnt_trace`
if [ $cnt -ne 0 ]; then
    fail "Tracing is still happeing"
fi

echo "!$func:traceoff" >> set_ftrace_filter

cnt=`grep schedule set_ftrace_filter | wc -l`
if [ $cnt -ne 0 ]; then
    fail "traceoff trigger still exists"
fi

on=`cat tracing_on`
if [ $on != "0" ]; then
    fail "Tracing is started again"
fi

echo "$func:traceon" > set_ftrace_filter

cnt=`grep schedule set_ftrace_filter | wc -l`
if [ $cnt -ne 1 ]; then
    fail "traceon trigger not found"
fi

cnt=`cnt_trace`
if [ $cnt -eq 0 ]; then
   fail "Tracing did not start"
fi

on=`cat tracing_on`
if [ $on != "1" ]; then
    fail "Tracing was not enabled"
fi


echo "!$func:traceon" >> set_ftrace_filter

cnt=`grep schedule set_ftrace_filter | wc -l`
if [ $cnt -ne 0 ]; then
   fail "traceon trigger still exists"
fi

check_sleep() {
    val=$1
    sleep $SLEEP_TIME
    cat set_ftrace_filter
    on=`cat tracing_on`
    if [ $on != "$val" ]; then
	fail "Expected tracing_on to be $val, but it was $on"
    fi
}


echo "$func:traceoff:3" > set_ftrace_filter
check_sleep "0"
echo 1 > tracing_on
check_sleep "0"
echo 1 > tracing_on
check_sleep "0"
echo 1 > tracing_on
check_sleep "1"
echo "!$func:traceoff:0" > set_ftrace_filter

if grep -e traceon -e traceoff set_ftrace_filter; then
    fail "Tracing on and off triggers still exist"
fi

disable_events

exit 0
