#!/bin/sh
###########################################################################
## ##
## Copyright (c) 2010 FUJITSU LIMITED ##
## ##
## This program is free software: you can redistribute it and/or modify ##
## it under the terms of the GNU General Public License as published by ##
## the Free Software Foundation, either version 3 of the License, or ##
## (at your option) any later version. ##
## ##
## This program is distributed in the hope that it will be useful, ##
## but WITHOUT ANY WARRANTY; without even the implied warranty of ##
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ##
## GNU General Public License for more details. ##
## ##
## You should have received a copy of the GNU General Public License ##
## along with this program. If not, see <http://www.gnu.org/licenses/>. ##
## ##
## Author: Li Zefan <lizf@cn.fujitsu.com> ##
## ##
###########################################################################
. test.sh
ftrace_test_init()
{
export TPATH="$PWD"
export SPATH="$TPATH/ftrace_stress"
if grep -q debugfs /proc/mounts; then
export DEBUGFS_PATH=/sys/kernel/debug/
export TRACING_PATH="$DEBUGFS_PATH/tracing"
debugfs_def_mounted=1
else
tst_tmpdir
export DEBUGFS_PATH="$PWD/debugfs"
export TRACING_PATH="$PWD/debugfs/tracing"
mkdir $DEBUGFS_PATH
mount -t debugfs xxx $DEBUGFS_PATH
fi
TST_CLEANUP=clean_up
trap clean_up_exit INT
tst_require_root
# Check to see tracing feature is supported or not
if [ ! -d $TRACING_PATH ]; then
tst_brkm TCONF "Tracing is not supported. Skip the test..."
fi
save_old_setting
}
test_interval=$1
save_old_setting()
{
cd $TRACING_PATH
old_trace_options=( `cat trace_options` )
old_tracing_on=`cat tracing_on`
old_buffer_size=`cat buffer_size_kb`
old_tracing_cpumask=`cat tracing_cpumask`
if [ -e tracing_cpumask ]; then
old_tracing_cpumask=`cat tracing_cpumask`
fi
if [ -e tracing_enabled ]; then
old_tracing_enabled=`cat tracing_enabled`
fi
if [ -e stack_max_size ]; then
old_stack_tracer_enabled=`cat /proc/sys/kernel/stack_tracer_enabled`
fi
if [ -e "/proc/sys/kernel/ftrace_enabled" ]; then
old_ftrace_enabled=`cat /proc/sys/kernel/ftrace_enabled`
fi
if [ -e "function_profile_enabled" ]; then
old_profile_enabled=`cat function_profile_enabled`
fi
setting_saved=1
cd - > /dev/null
}
restore_old_setting()
{
if [ ! "$setting_saved" = 1 ]; then
return
fi
cd $TRACING_PATH
echo nop > current_tracer
echo 0 > events/enable
if [ -e tracing_max_latency ]; then
echo 0 > tracing_max_latency
fi
if [ -e tracing_cpumask ]; then
echo $old_tracing_cpumask > tracing_cpumask
fi
if [ -e trace_clock ]; then
echo local > trace_clock
fi
if [ -e "function_pofile_enabled" ]; then
echo $old_profile_enabled > function_profile_enabled
fi
if [ -e "/proc/sys/kernel/ftrace_enabled" ]; then
echo $old_ftrace_enabled > /proc/sys/kernel/ftrace_enabled
fi
if [ -e stack_max_size ]; then
echo $old_stack_tracer_enabled > /proc/sys/kernel/stack_tracer_enabled
echo 0 > stack_max_size
fi
echo $old_buffer_size > buffer_size_kb
echo $old_tracing_on > tracing_on
if [ -e tracing_enabled ];then
echo $old_tracing_enabled > tracing_enabled
fi
for option in $old_trace_options
do
echo $option > trace_options 2> /dev/null
done
echo > trace
if [ -f set_ftrace_filter ]; then
echo > set_ftrace_filter
fi
cd - > /dev/null
}
clean_up_mount()
{
if [ ! "$debugfs_def_mounted" = "1" ]; then
umount $DEBUGFS_PATH
rmdir $DEBUGFS_PATH
fi
}
clean_up()
{
restore_old_setting
clean_up_mount
}
clean_up_exit()
{
restore_old_setting
clean_up_mount
exit 1
}
test_begin()
{
start_time=`date +%s`
}
test_wait()
{
# run the test for $test_interval secs
tst_sleep ${test_interval}s
}
ftrace_test_init