selftests: ftrace: Add a test to test function triggers to start and stop tracing
This adds a test to test the function tiggers traceon and traceoff to make sure that it starts and stops tracing when a function is hit. The test performs the following: o Enables all events o Writes schedule:traceoff into set_ftrace_filter o Makes sure the tigger exists in the file o Makes sure the trace file no longer grows o Makes sure that tracing_on is now zero o Clears the trace file o Makes sure it's still empty o Removes the trigger o Makes sure tracing is still off (tracing_on is zero) o Writes schedule:traceon into set_ftrace_filter o Makes sure the trace file is no longer empty o Makes sure that tracing_on file is set to one o Removes the trigger o Makes sure the trigger is no longer there o Writes schedule:traceoff:3 into set_ftrace_filter o Makes sure that tracing_on turns off . Writes 1 into tracing_on . Makes sure that it turns off 2 more times o Writes 1 into tracing_on o Makes sure that tracing_on is still a one Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
This commit is contained in:
parent
43bb45da82
commit
d8b39e1d98
1 changed files with 171 additions and 0 deletions
|
@ -0,0 +1,171 @@
|
|||
#!/bin/sh
|
||||
# description: ftrace - test for function traceon/off triggers
|
||||
#
|
||||
# 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"
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
line1=`cat trace | tail -1`
|
||||
sleep $SLEEP_TIME
|
||||
line2=`cat trace | tail -1`
|
||||
|
||||
if [ "$line1" != "$line2" ]; 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
|
Loading…
Reference in a new issue