#!/bin/sh
# SPDX-License-Identifier: GPL-2.0
# 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
