Merge tag 'trace-v4.10' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace
Pull tracing updates from Steven Rostedt: "This release has a few updates: - STM can hook into the function tracer - Function filtering now supports more advance glob matching - Ftrace selftests updates and added tests - Softirq tag in traces now show only softirqs - ARM nop added to non traced locations at compile time - New trace_marker_raw file that allows for binary input - Optimizations to the ring buffer - Removal of kmap in trace_marker - Wakeup and irqsoff tracers now adhere to the set_graph_notrace file - Other various fixes and clean ups" * tag 'trace-v4.10' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace: (42 commits) selftests: ftrace: Shift down default message verbosity kprobes/trace: Fix kprobe selftest for newer gcc tracing/kprobes: Add a helper method to return number of probe hits tracing/rb: Init the CPU mask on allocation tracing: Use SOFTIRQ_OFFSET for softirq dectection for more accurate results tracing/fgraph: Have wakeup and irqsoff tracers ignore graph functions too fgraph: Handle a case where a tracer ignores set_graph_notrace tracing: Replace kmap with copy_from_user() in trace_marker writing ftrace/x86_32: Set ftrace_stub to weak to prevent gcc from using short jumps to it tracing: Allow benchmark to be enabled at early_initcall() tracing: Have system enable return error if one of the events fail tracing: Do not start benchmark on boot up tracing: Have the reg function allow to fail ring-buffer: Force rb_end_commit() and rb_set_commit_to_write() inline ring-buffer: Froce rb_update_write_stamp() to be inlined ring-buffer: Force inline of hotpath helper functions tracing: Make __buffer_unlock_commit() always_inline tracing: Make tracepoint_printk a static_key ring-buffer: Always inline rb_event_data() ring-buffer: Make rb_reserve_next_event() always inlined ...
This commit is contained in:
1
tools/testing/selftests/ftrace/.gitignore
vendored
Normal file
1
tools/testing/selftests/ftrace/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
logs
|
@@ -13,7 +13,8 @@ echo "Usage: ftracetest [options] [testcase(s)] [testcase-directory(s)]"
|
||||
echo " Options:"
|
||||
echo " -h|--help Show help message"
|
||||
echo " -k|--keep Keep passed test logs"
|
||||
echo " -v|--verbose Show all stdout messages in testcases"
|
||||
echo " -v|--verbose Increase verbosity of test messages"
|
||||
echo " -vv Alias of -v -v (Show all results in stdout)"
|
||||
echo " -d|--debug Debug mode (trace all shell commands)"
|
||||
exit $1
|
||||
}
|
||||
@@ -54,8 +55,9 @@ parse_opts() { # opts
|
||||
KEEP_LOG=1
|
||||
shift 1
|
||||
;;
|
||||
--verbose|-v)
|
||||
VERBOSE=1
|
||||
--verbose|-v|-vv)
|
||||
VERBOSE=$((VERBOSE + 1))
|
||||
[ $1 == '-vv' ] && VERBOSE=$((VERBOSE + 1))
|
||||
shift 1
|
||||
;;
|
||||
--debug|-d)
|
||||
@@ -228,7 +230,7 @@ trap 'SIG_RESULT=$XFAIL' $SIG_XFAIL
|
||||
|
||||
__run_test() { # testfile
|
||||
# setup PID and PPID, $$ is not updated.
|
||||
(cd $TRACING_DIR; read PID _ < /proc/self/stat ; set -e; set -x; . $1)
|
||||
(cd $TRACING_DIR; read PID _ < /proc/self/stat; set -e; set -x; initialize_ftrace; . $1)
|
||||
[ $? -ne 0 ] && kill -s $SIG_FAIL $SIG_PID
|
||||
}
|
||||
|
||||
@@ -236,10 +238,11 @@ __run_test() { # testfile
|
||||
run_test() { # testfile
|
||||
local testname=`basename $1`
|
||||
local testlog=`mktemp $LOG_DIR/${testname}-log.XXXXXX`
|
||||
export TMPDIR=`mktemp -d /tmp/ftracetest-dir.XXXXXX`
|
||||
testcase $1
|
||||
echo "execute: "$1 > $testlog
|
||||
SIG_RESULT=0
|
||||
if [ $VERBOSE -ne 0 ]; then
|
||||
if [ $VERBOSE -ge 2 ]; then
|
||||
__run_test $1 2>> $testlog | tee -a $testlog
|
||||
else
|
||||
__run_test $1 >> $testlog 2>&1
|
||||
@@ -249,9 +252,10 @@ run_test() { # testfile
|
||||
# Remove test log if the test was done as it was expected.
|
||||
[ $KEEP_LOG -eq 0 ] && rm $testlog
|
||||
else
|
||||
catlog $testlog
|
||||
[ $VERBOSE -ge 1 ] && catlog $testlog
|
||||
TOTAL_RESULT=1
|
||||
fi
|
||||
rm -rf $TMPDIR
|
||||
}
|
||||
|
||||
# load in the helper functions
|
||||
|
@@ -0,0 +1,49 @@
|
||||
#!/bin/sh
|
||||
# description: ftrace - function glob filters
|
||||
|
||||
# Make sure that function glob matching filter works.
|
||||
|
||||
if ! grep -q function available_tracers; then
|
||||
echo "no function tracer configured"
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
disable_tracing
|
||||
clear_trace
|
||||
|
||||
# filter by ?, schedule is always good
|
||||
if ! echo "sch?dule" > set_ftrace_filter; then
|
||||
# test for powerpc 64
|
||||
if ! echo ".sch?dule" > set_ftrace_filter; then
|
||||
fail "can not enable schedule filter"
|
||||
fi
|
||||
cat set_ftrace_filter | grep '^.schedule$'
|
||||
else
|
||||
cat set_ftrace_filter | grep '^schedule$'
|
||||
fi
|
||||
|
||||
ftrace_filter_check() { # glob grep
|
||||
echo "$1" > set_ftrace_filter
|
||||
cut -f1 -d" " set_ftrace_filter > $TMPDIR/actual
|
||||
cut -f1 -d" " available_filter_functions | grep "$2" > $TMPDIR/expected
|
||||
DIFF=`diff $TMPDIR/actual $TMPDIR/expected`
|
||||
test -z "$DIFF"
|
||||
}
|
||||
|
||||
# filter by *, front match
|
||||
ftrace_filter_check '*schedule' '^.*schedule$'
|
||||
|
||||
# filter by *, middle match
|
||||
ftrace_filter_check '*schedule*' '^.*schedule.*$'
|
||||
|
||||
# filter by *, end match
|
||||
ftrace_filter_check 'schedule*' '^schedule.*$'
|
||||
|
||||
# filter by *, both side match
|
||||
ftrace_filter_check 'sch*ule' '^sch.*ule$'
|
||||
|
||||
# filter by char class.
|
||||
ftrace_filter_check '[Ss]y[Ss]_*' '^[Ss]y[Ss]_.*$'
|
||||
|
||||
echo > set_ftrace_filter
|
||||
enable_tracing
|
@@ -23,3 +23,31 @@ reset_trigger() { # reset all current setting triggers
|
||||
done
|
||||
}
|
||||
|
||||
reset_events_filter() { # reset all current setting filters
|
||||
grep -v ^none events/*/*/filter |
|
||||
while read line; do
|
||||
echo 0 > `echo $line | cut -f1 -d:`
|
||||
done
|
||||
}
|
||||
|
||||
disable_events() {
|
||||
echo 0 > events/enable
|
||||
}
|
||||
|
||||
initialize_ftrace() { # Reset ftrace to initial-state
|
||||
# As the initial state, ftrace will be set to nop tracer,
|
||||
# no events, no triggers, no filters, no function filters,
|
||||
# no probes, and tracing on.
|
||||
disable_tracing
|
||||
reset_tracer
|
||||
reset_trigger
|
||||
reset_events_filter
|
||||
disable_events
|
||||
echo > set_event_pid # event tracer is always on
|
||||
[ -f set_ftrace_filter ] && echo | tee set_ftrace_*
|
||||
[ -f set_graph_function ] && echo | tee set_graph_*
|
||||
[ -f stack_trace_filter ] && echo > stack_trace_filter
|
||||
[ -f kprobe_events ] && echo > kprobe_events
|
||||
[ -f uprobe_events ] && echo > uprobe_events
|
||||
enable_tracing
|
||||
}
|
||||
|
@@ -0,0 +1,37 @@
|
||||
#!/bin/sh
|
||||
# description: Kprobes event arguments with types
|
||||
|
||||
[ -f kprobe_events ] || exit_unsupported # this is configurable
|
||||
|
||||
grep "x8/16/32/64" README > /dev/null || exit_unsupported # version issue
|
||||
|
||||
echo 0 > events/enable
|
||||
echo > kprobe_events
|
||||
enable_tracing
|
||||
|
||||
echo 'p:testprobe _do_fork $stack0:s32 $stack0:u32 $stack0:x32 $stack0:b8@4/32' > kprobe_events
|
||||
grep testprobe kprobe_events
|
||||
test -d events/kprobes/testprobe
|
||||
|
||||
echo 1 > events/kprobes/testprobe/enable
|
||||
( echo "forked")
|
||||
echo 0 > events/kprobes/testprobe/enable
|
||||
ARGS=`tail -n 1 trace | sed -e 's/.* arg1=\(.*\) arg2=\(.*\) arg3=\(.*\) arg4=\(.*\)/\1 \2 \3 \4/'`
|
||||
|
||||
check_types() {
|
||||
X1=`printf "%x" $1 | tail -c 8`
|
||||
X2=`printf "%x" $2`
|
||||
X3=`printf "%x" $3`
|
||||
test $X1 = $X2
|
||||
test $X2 = $X3
|
||||
test 0x$X3 = $3
|
||||
|
||||
B4=`printf "%x" $4`
|
||||
B3=`echo -n $X3 | tail -c 3 | head -c 2`
|
||||
test $B3 = $B4
|
||||
}
|
||||
check_types $ARGS
|
||||
|
||||
echo "-:testprobe" >> kprobe_events
|
||||
clear_trace
|
||||
test -d events/kprobes/testprobe && exit 1 || exit 0
|
@@ -56,7 +56,7 @@ echo "Test histogram with syscall modifier"
|
||||
|
||||
echo 'hist:keys=id.syscall' > events/raw_syscalls/sys_exit/trigger
|
||||
for i in `seq 1 10` ; do ( echo "forked" > /dev/null); done
|
||||
grep "id: sys_" events/raw_syscalls/sys_exit/hist > /dev/null || \
|
||||
grep "id: \(unknown_\|sys_\)" events/raw_syscalls/sys_exit/hist > /dev/null || \
|
||||
fail "syscall modifier on raw_syscalls/sys_exit did not work"
|
||||
|
||||
|
||||
|
@@ -23,6 +23,11 @@ if [ ! -f events/sched/sched_process_fork/trigger ]; then
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
if [ ! -f snapshot ]; then
|
||||
echo "snapshot is not supported"
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
reset_tracer
|
||||
do_reset
|
||||
|
||||
|
Reference in New Issue
Block a user