#!/bin/sh
|
# SPDX-License-Identifier: GPL-2.0
|
# description: ftrace - function graph filters with stack tracer
|
|
# Make sure that function graph filtering works, and is not
|
# affected by other tracers enabled (like stack tracer)
|
|
if ! grep -q function_graph available_tracers; then
|
echo "no function graph tracer configured"
|
exit_unsupported
|
fi
|
|
if [ ! -f set_ftrace_filter ]; then
|
echo "set_ftrace_filter not found? Is dynamic ftrace not set?"
|
exit_unsupported
|
fi
|
|
do_reset() {
|
reset_tracer
|
if [ -e /proc/sys/kernel/stack_tracer_enabled ]; then
|
echo 0 > /proc/sys/kernel/stack_tracer_enabled
|
fi
|
enable_tracing
|
clear_trace
|
echo > set_ftrace_filter
|
}
|
|
fail() { # msg
|
do_reset
|
echo $1
|
exit_fail
|
}
|
|
disable_tracing
|
clear_trace;
|
|
# filter something, schedule is always good
|
if ! echo "schedule" > set_ftrace_filter; then
|
# test for powerpc 64
|
if ! echo ".schedule" > set_ftrace_filter; then
|
fail "can not enable schedule filter"
|
fi
|
fi
|
|
echo function_graph > current_tracer
|
|
if [ ! -f stack_trace ]; then
|
echo "Stack tracer not configured"
|
do_reset
|
exit_unsupported;
|
fi
|
|
echo "Now testing with stack tracer"
|
|
echo 1 > /proc/sys/kernel/stack_tracer_enabled
|
|
disable_tracing
|
clear_trace
|
enable_tracing
|
sleep 1
|
|
count=`cat trace | grep '()' | grep -v schedule | wc -l`
|
|
if [ $count -ne 0 ]; then
|
fail "Graph filtering not working with stack tracer?"
|
fi
|
|
# Make sure we did find something
|
count=`cat trace | grep 'schedule()' | wc -l`
|
if [ $count -eq 0 ]; then
|
fail "No schedule traces found?"
|
fi
|
|
echo 0 > /proc/sys/kernel/stack_tracer_enabled
|
clear_trace
|
sleep 1
|
|
|
count=`cat trace | grep '()' | grep -v schedule | wc -l`
|
|
if [ $count -ne 0 ]; then
|
fail "Graph filtering not working after stack tracer disabled?"
|
fi
|
|
count=`cat trace | grep 'schedule()' | wc -l`
|
if [ $count -eq 0 ]; then
|
fail "No schedule traces found?"
|
fi
|
|
do_reset
|
|
exit 0
|