linux-kselftest-4.20-rc1
This Kselftest update for Linux 4.20-rc1 consists of: - Improvements to ftrace test suite from Masami Hiramatsu. - Color coded ftrace PASS / FAIL results from Steven Rostedt (VMware) to improve readability of reports. - watchdog Fixes and enhancement to add gettimeout and get|set pretimeout options from Jerry Hoemann. - Several fixes to warnings and spelling etc. -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEPZKym/RZuOCGeA/kCwJExA0NQxwFAlvSA/oACgkQCwJExA0N QxxQgA//UINds/f39g3nPf6QMhHcNQmNxdT/EYBSmKkorUTl3ojRFmcjerSt1DQ2 evgfFqU2oxyeqEvgApb1b39s7FGLVwzU67fALxpnn8xgFCvcHu1hWjbGLN34W1OY bnHnrTAhzgL6FV2EpJDAvN/1M1msq4Gp74GjZ/47aGwYQxkGXtm/WXMbQw+bJTFd bPC103URY56ihRlLLzxn+cNpbueYcbhI/OpYlYajvwBCFpIhTbdluscZpOmPt5nl Ej/TJ6DjgzlXqf8ZdvbAKblvTmjp2ik2OmtNybbr7CuvgKvxSfhsfP7itRL4UKhg /uHs2Ki5KmGczYxv6BYpNpjpyslWDz0WMcEBAsH+017IFsB+jrkEH7ys9KEkUhWc U+/LqPld/B9C1FpLah92SDuRck0MSUfOvqKdJTABdSIWO8REDiPhiIDlvH9tYrPm XgDvf/yldU3Sxemrqsxe9ooHp4kqr+vmVuXBfFd24CJTaGBPtcM25uTYEb06IyyL Lkd07YoHMRXzKxCGV9Lpfs4DQpP8WGhkMwFoFhbTXYkrf8yLk5GVpj3UVUluTAk4 q0/L9wKcaR5r1CqwCIE+ZsioRGlFBcpsAYD6zPc8HaV50X1zj65boK7Fj/HHzmTs Oyi9epp3T4Ml5NAbJeiA66GCpy1RRlEX3r/EVp2dW+FvBlyidUE= =cpOg -----END PGP SIGNATURE----- Merge tag 'linux-kselftest-4.20-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest Pull kselftest updates from Shuah Khan: "This Kselftest update for Linux 4.20-rc1 consists of: - Improvements to ftrace test suite from Masami Hiramatsu. - Color coded ftrace PASS / FAIL results from Steven Rostedt (VMware) to improve readability of reports. - watchdog Fixes and enhancement to add gettimeout and get|set pretimeout options from Jerry Hoemann. - Several fixes to warnings and spelling etc" * tag 'linux-kselftest-4.20-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest: (40 commits) selftests/ftrace: Strip escape sequences for log file selftests/ftrace: Use colored output when available selftests: fix warning: "_GNU_SOURCE" redefined selftests: kvm: Fix -Wformat warnings selftests/ftrace: Add color to the PASS / FAIL results kvm: selftests: fix spelling mistake "Insufficent" -> "Insufficient" selftests: gpio: Fix OUTPUT directory in Makefile selftests: gpio: restructure Makefile selftests: watchdog: Fix ioctl SET* error paths to take oneshot exit path selftests: watchdog: Add gettimeout and get|set pretimeout selftests: watchdog: Fix error message. selftests: watchdog: fix message when /dev/watchdog open fails selftests/ftrace: Add ftrace cpumask testcase selftests/ftrace: Add wakeup_rt tracer testcase selftests/ftrace: Add wakeup tracer testcase selftests/ftrace: Add stacktrace ftrace filter command testcase selftests/ftrace: Add trace_pipe testcase selftests/ftrace: Add function filter on module testcase selftests/ftrace: Add max stack tracer testcase selftests/ftrace: Add function profiling stat testcase ...
This commit is contained in:
commit
f8cab69be0
@ -4,6 +4,12 @@ CONFIG_FUNCTION_PROFILER=y
|
||||
CONFIG_TRACER_SNAPSHOT=y
|
||||
CONFIG_STACK_TRACER=y
|
||||
CONFIG_HIST_TRIGGERS=y
|
||||
CONFIG_SCHED_TRACER=y
|
||||
CONFIG_PREEMPT_TRACER=y
|
||||
CONFIG_IRQSOFF_TRACER=y
|
||||
CONFIG_PREEMPTIRQ_DELAY_TEST=m
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SAMPLES=y
|
||||
CONFIG_SAMPLE_TRACE_PRINTK=m
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
|
@ -60,15 +60,29 @@ parse_opts() { # opts
|
||||
shift 1
|
||||
;;
|
||||
--verbose|-v|-vv|-vvv)
|
||||
if [ $VERBOSE -eq -1 ]; then
|
||||
usage "--console can not use with --verbose"
|
||||
fi
|
||||
VERBOSE=$((VERBOSE + 1))
|
||||
[ $1 = '-vv' ] && VERBOSE=$((VERBOSE + 1))
|
||||
[ $1 = '-vvv' ] && VERBOSE=$((VERBOSE + 2))
|
||||
shift 1
|
||||
;;
|
||||
--console)
|
||||
if [ $VERBOSE -ne 0 ]; then
|
||||
usage "--console can not use with --verbose"
|
||||
fi
|
||||
VERBOSE=-1
|
||||
shift 1
|
||||
;;
|
||||
--debug|-d)
|
||||
DEBUG=1
|
||||
shift 1
|
||||
;;
|
||||
--stop-fail)
|
||||
STOP_FAILURE=1
|
||||
shift 1
|
||||
;;
|
||||
--fail-unsupported)
|
||||
UNSUPPORTED_RESULT=1
|
||||
shift 1
|
||||
@ -117,6 +131,7 @@ KEEP_LOG=0
|
||||
DEBUG=0
|
||||
VERBOSE=0
|
||||
UNSUPPORTED_RESULT=0
|
||||
STOP_FAILURE=0
|
||||
# Parse command-line options
|
||||
parse_opts $*
|
||||
|
||||
@ -137,11 +152,33 @@ else
|
||||
date > $LOG_FILE
|
||||
fi
|
||||
|
||||
# Define text colors
|
||||
# Check available colors on the terminal, if any
|
||||
ncolors=`tput colors 2>/dev/null`
|
||||
color_reset=
|
||||
color_red=
|
||||
color_green=
|
||||
color_blue=
|
||||
# If stdout exists and number of colors is eight or more, use them
|
||||
if [ -t 1 -a "$ncolors" -a "$ncolors" -ge 8 ]; then
|
||||
color_reset="\e[0m"
|
||||
color_red="\e[31m"
|
||||
color_green="\e[32m"
|
||||
color_blue="\e[34m"
|
||||
fi
|
||||
|
||||
strip_esc() {
|
||||
# busybox sed implementation doesn't accept "\x1B", so use [:cntrl:] instead.
|
||||
sed -E "s/[[:cntrl:]]\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"
|
||||
}
|
||||
|
||||
prlog() { # messages
|
||||
[ -z "$LOG_FILE" ] && echo "$@" || echo "$@" | tee -a $LOG_FILE
|
||||
echo -e "$@"
|
||||
[ "$LOG_FILE" ] && echo -e "$@" | strip_esc >> $LOG_FILE
|
||||
}
|
||||
catlog() { #file
|
||||
[ -z "$LOG_FILE" ] && cat $1 || cat $1 | tee -a $LOG_FILE
|
||||
cat $1
|
||||
[ "$LOG_FILE" ] && cat $1 | strip_esc >> $LOG_FILE
|
||||
}
|
||||
prlog "=== Ftrace unit tests ==="
|
||||
|
||||
@ -180,37 +217,37 @@ test_on_instance() { # testfile
|
||||
eval_result() { # sigval
|
||||
case $1 in
|
||||
$PASS)
|
||||
prlog " [PASS]"
|
||||
prlog " [${color_green}PASS${color_reset}]"
|
||||
PASSED_CASES="$PASSED_CASES $CASENO"
|
||||
return 0
|
||||
;;
|
||||
$FAIL)
|
||||
prlog " [FAIL]"
|
||||
prlog " [${color_red}FAIL${color_reset}]"
|
||||
FAILED_CASES="$FAILED_CASES $CASENO"
|
||||
return 1 # this is a bug.
|
||||
;;
|
||||
$UNRESOLVED)
|
||||
prlog " [UNRESOLVED]"
|
||||
prlog " [${color_blue}UNRESOLVED${color_reset}]"
|
||||
UNRESOLVED_CASES="$UNRESOLVED_CASES $CASENO"
|
||||
return 1 # this is a kind of bug.. something happened.
|
||||
;;
|
||||
$UNTESTED)
|
||||
prlog " [UNTESTED]"
|
||||
prlog " [${color_blue}UNTESTED${color_reset}]"
|
||||
UNTESTED_CASES="$UNTESTED_CASES $CASENO"
|
||||
return 0
|
||||
;;
|
||||
$UNSUPPORTED)
|
||||
prlog " [UNSUPPORTED]"
|
||||
prlog " [${color_blue}UNSUPPORTED${color_reset}]"
|
||||
UNSUPPORTED_CASES="$UNSUPPORTED_CASES $CASENO"
|
||||
return $UNSUPPORTED_RESULT # depends on use case
|
||||
;;
|
||||
$XFAIL)
|
||||
prlog " [XFAIL]"
|
||||
prlog " [${color_red}XFAIL${color_reset}]"
|
||||
XFAILED_CASES="$XFAILED_CASES $CASENO"
|
||||
return 0
|
||||
;;
|
||||
*)
|
||||
prlog " [UNDEFINED]"
|
||||
prlog " [${color_blue}UNDEFINED${color_reset}]"
|
||||
UNDEFINED_CASES="$UNDEFINED_CASES $CASENO"
|
||||
return 1 # this must be a test bug
|
||||
;;
|
||||
@ -269,16 +306,18 @@ __run_test() { # testfile
|
||||
# Run one test case
|
||||
run_test() { # testfile
|
||||
local testname=`basename $1`
|
||||
testcase $1
|
||||
if [ ! -z "$LOG_FILE" ] ; then
|
||||
local testlog=`mktemp $LOG_DIR/${testname}-log.XXXXXX`
|
||||
local testlog=`mktemp $LOG_DIR/${CASENO}-${testname}-log.XXXXXX`
|
||||
else
|
||||
local testlog=/proc/self/fd/1
|
||||
fi
|
||||
export TMPDIR=`mktemp -d /tmp/ftracetest-dir.XXXXXX`
|
||||
testcase $1
|
||||
echo "execute$INSTANCE: "$1 > $testlog
|
||||
SIG_RESULT=0
|
||||
if [ -z "$LOG_FILE" ]; then
|
||||
if [ $VERBOSE -eq -1 ]; then
|
||||
__run_test $1
|
||||
elif [ -z "$LOG_FILE" ]; then
|
||||
__run_test $1 2>&1
|
||||
elif [ $VERBOSE -ge 3 ]; then
|
||||
__run_test $1 | tee -a $testlog 2>&1
|
||||
@ -304,6 +343,10 @@ run_test() { # testfile
|
||||
# Main loop
|
||||
for t in $TEST_CASES; do
|
||||
run_test $t
|
||||
if [ $STOP_FAILURE -ne 0 -a $TOTAL_RESULT -ne 0 ]; then
|
||||
echo "A failure detected. Stop test."
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
# Test on instance loop
|
||||
@ -315,7 +358,12 @@ for t in $TEST_CASES; do
|
||||
run_test $t
|
||||
rmdir $TRACING_DIR
|
||||
TRACING_DIR=$SAVED_TRACING_DIR
|
||||
if [ $STOP_FAILURE -ne 0 -a $TOTAL_RESULT -ne 0 ]; then
|
||||
echo "A failure detected. Stop test."
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
(cd $TRACING_DIR; initialize_ftrace) # for cleanup
|
||||
|
||||
prlog ""
|
||||
prlog "# of passed: " `echo $PASSED_CASES | wc -w`
|
||||
|
@ -0,0 +1,22 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# description: Change the ringbuffer size
|
||||
# flags: instance
|
||||
|
||||
rb_size_test() {
|
||||
ORIG=`cat buffer_size_kb`
|
||||
|
||||
expr $ORIG / 2 > buffer_size_kb
|
||||
|
||||
expr $ORIG \* 2 > buffer_size_kb
|
||||
|
||||
echo $ORIG > buffer_size_kb
|
||||
}
|
||||
|
||||
rb_size_test
|
||||
|
||||
: "If per-cpu buffer is supported, imbalance it"
|
||||
if [ -d per_cpu/cpu0 ]; then
|
||||
cd per_cpu/cpu0
|
||||
rb_size_test
|
||||
fi
|
16
tools/testing/selftests/ftrace/test.d/00basic/trace_pipe.tc
Normal file
16
tools/testing/selftests/ftrace/test.d/00basic/trace_pipe.tc
Normal file
@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# description: trace_pipe and trace_marker
|
||||
# flags: instance
|
||||
|
||||
[ ! -f trace_marker ] && exit_unsupported
|
||||
|
||||
echo "test input 1" > trace_marker
|
||||
|
||||
: "trace interface never consume the ring buffer"
|
||||
grep -q "test input 1" trace
|
||||
grep -q "test input 1" trace
|
||||
|
||||
: "trace interface never consume the ring buffer"
|
||||
head -n 1 trace_pipe | grep -q "test input 1"
|
||||
! grep -q "test input 1" trace
|
@ -9,23 +9,15 @@ do_reset() {
|
||||
}
|
||||
|
||||
fail() { #msg
|
||||
do_reset
|
||||
echo $1
|
||||
exit_fail
|
||||
}
|
||||
|
||||
yield() {
|
||||
ping localhost -c 1 || sleep .001 || usleep 1 || sleep 1
|
||||
}
|
||||
|
||||
if [ ! -f set_event -o ! -d events/sched ]; then
|
||||
echo "event tracing is not supported"
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
reset_tracer
|
||||
do_reset
|
||||
|
||||
echo 'sched:sched_switch' > set_event
|
||||
|
||||
yield
|
||||
@ -57,6 +49,4 @@ if [ $count -ne 0 ]; then
|
||||
fail "sched_switch events should not be recorded"
|
||||
fi
|
||||
|
||||
do_reset
|
||||
|
||||
exit 0
|
||||
|
@ -16,10 +16,6 @@ fail() { #msg
|
||||
exit_fail
|
||||
}
|
||||
|
||||
yield() {
|
||||
ping localhost -c 1 || sleep .001 || usleep 1 || sleep 1
|
||||
}
|
||||
|
||||
if [ ! -f set_event -o ! -d events/sched ]; then
|
||||
echo "event tracing is not supported"
|
||||
exit_unsupported
|
||||
@ -30,8 +26,7 @@ if [ ! -f set_event_pid ]; then
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
reset_tracer
|
||||
do_reset
|
||||
echo 0 > options/event-fork
|
||||
|
||||
echo 1 > events/sched/sched_switch/enable
|
||||
|
||||
@ -47,6 +42,7 @@ do_reset
|
||||
read mypid rest < /proc/self/stat
|
||||
|
||||
echo $mypid > set_event_pid
|
||||
grep -q $mypid set_event_pid
|
||||
echo 'sched:sched_switch' > set_event
|
||||
|
||||
yield
|
||||
|
@ -9,23 +9,15 @@ do_reset() {
|
||||
}
|
||||
|
||||
fail() { #msg
|
||||
do_reset
|
||||
echo $1
|
||||
exit_fail
|
||||
}
|
||||
|
||||
yield() {
|
||||
ping localhost -c 1 || sleep .001 || usleep 1 || sleep 1
|
||||
}
|
||||
|
||||
if [ ! -f set_event -o ! -d events/sched ]; then
|
||||
echo "event tracing is not supported"
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
reset_tracer
|
||||
do_reset
|
||||
|
||||
echo 'sched:*' > set_event
|
||||
|
||||
yield
|
||||
@ -57,6 +49,4 @@ if [ $count -ne 0 ]; then
|
||||
fail "any of scheduler events should not be recorded"
|
||||
fi
|
||||
|
||||
do_reset
|
||||
|
||||
exit 0
|
||||
|
@ -8,23 +8,15 @@ do_reset() {
|
||||
}
|
||||
|
||||
fail() { #msg
|
||||
do_reset
|
||||
echo $1
|
||||
exit_fail
|
||||
}
|
||||
|
||||
yield() {
|
||||
ping localhost -c 1 || sleep .001 || usleep 1 || sleep 1
|
||||
}
|
||||
|
||||
if [ ! -f available_events -o ! -f set_event -o ! -d events ]; then
|
||||
echo "event tracing is not supported"
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
reset_tracer
|
||||
do_reset
|
||||
|
||||
echo '*:*' > set_event
|
||||
|
||||
yield
|
||||
@ -60,6 +52,4 @@ if [ $count -ne 0 ]; then
|
||||
fail "any of events should not be recorded"
|
||||
fi
|
||||
|
||||
do_reset
|
||||
|
||||
exit 0
|
||||
|
27
tools/testing/selftests/ftrace/test.d/event/trace_printk.tc
Normal file
27
tools/testing/selftests/ftrace/test.d/event/trace_printk.tc
Normal file
@ -0,0 +1,27 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# description: Test trace_printk from module
|
||||
|
||||
rmmod trace-printk ||:
|
||||
if ! modprobe trace-printk ; then
|
||||
echo "No trace-printk sample module - please make CONFIG_SAMPLE_TRACE_PRINTK=m"
|
||||
exit_unresolved;
|
||||
fi
|
||||
|
||||
echo "Waiting for irq work"
|
||||
sleep 1
|
||||
|
||||
grep -q ": This .* trace_bputs" trace
|
||||
grep -q ": This .* trace_puts" trace
|
||||
grep -q ": This .* trace_bprintk" trace
|
||||
grep -q ": This .* trace_printk" trace
|
||||
|
||||
grep -q ": (irq) .* trace_bputs" trace
|
||||
grep -q ": (irq) .* trace_puts" trace
|
||||
grep -q ": (irq) .* trace_bprintk" trace
|
||||
grep -q ": (irq) .* trace_printk" trace
|
||||
|
||||
grep -q "This is a %s that will use trace_bprintk" printk_formats
|
||||
grep -q "(irq) This is a static string that will use trace_bputs" printk_formats
|
||||
|
||||
rmmod trace-printk ||:
|
@ -16,13 +16,9 @@ if [ ! -f set_ftrace_filter ]; then
|
||||
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
|
||||
|
@ -9,14 +9,7 @@ if ! grep -q function_graph available_tracers; then
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
do_reset() {
|
||||
reset_tracer
|
||||
enable_tracing
|
||||
clear_trace
|
||||
}
|
||||
|
||||
fail() { # msg
|
||||
do_reset
|
||||
echo $1
|
||||
exit_fail
|
||||
}
|
||||
@ -48,6 +41,4 @@ if [ $count -eq 0 ]; then
|
||||
fail "No schedule traces found?"
|
||||
fi
|
||||
|
||||
do_reset
|
||||
|
||||
exit 0
|
||||
|
@ -35,12 +35,6 @@ if [ $do_function_fork -eq 1 ]; then
|
||||
fi
|
||||
|
||||
do_reset() {
|
||||
reset_tracer
|
||||
clear_trace
|
||||
enable_tracing
|
||||
echo > set_ftrace_filter
|
||||
echo > set_ftrace_pid
|
||||
|
||||
if [ $do_function_fork -eq 0 ]; then
|
||||
return
|
||||
fi
|
||||
@ -54,10 +48,6 @@ fail() { # msg
|
||||
exit_fail
|
||||
}
|
||||
|
||||
yield() {
|
||||
ping localhost -c 1 || sleep .001 || usleep 1 || sleep 1
|
||||
}
|
||||
|
||||
do_test() {
|
||||
disable_tracing
|
||||
|
||||
|
@ -0,0 +1,12 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL2.0
|
||||
# description: ftrace - stacktrace filter command
|
||||
# flags: instance
|
||||
|
||||
echo _do_fork:stacktrace >> set_ftrace_filter
|
||||
|
||||
grep -q "_do_fork:stacktrace:unlimited" set_ftrace_filter
|
||||
|
||||
(echo "forked"; sleep 1)
|
||||
|
||||
grep -q "<stack trace>" trace
|
42
tools/testing/selftests/ftrace/test.d/ftrace/func_cpumask.tc
Normal file
42
tools/testing/selftests/ftrace/test.d/ftrace/func_cpumask.tc
Normal file
@ -0,0 +1,42 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL2.0
|
||||
# description: ftrace - function trace with cpumask
|
||||
|
||||
if ! which nproc ; then
|
||||
nproc() {
|
||||
ls -d /sys/devices/system/cpu/cpu[0-9]* | wc -l
|
||||
}
|
||||
fi
|
||||
|
||||
NP=`nproc`
|
||||
|
||||
if [ $NP -eq 1 ] ;then
|
||||
echo "We can not test cpumask on UP environment"
|
||||
exit_unresolved
|
||||
fi
|
||||
|
||||
ORIG_CPUMASK=`cat tracing_cpumask`
|
||||
|
||||
do_reset() {
|
||||
echo $ORIG_CPUMASK > tracing_cpumask
|
||||
}
|
||||
|
||||
echo 0 > tracing_on
|
||||
echo > trace
|
||||
: "Bitmask only record on CPU1"
|
||||
echo 2 > tracing_cpumask
|
||||
MASK=0x`cat tracing_cpumask`
|
||||
test `printf "%d" $MASK` -eq 2 || do_reset
|
||||
|
||||
echo function > current_tracer
|
||||
echo 1 > tracing_on
|
||||
(echo "forked")
|
||||
echo 0 > tracing_on
|
||||
|
||||
: "Check CPU1 events are recorded"
|
||||
grep -q -e "\[001\]" trace || do_reset
|
||||
|
||||
: "There should be No other cpu events"
|
||||
! grep -qv -e "\[001\]" -e "^#" trace || do_reset
|
||||
|
||||
do_reset
|
@ -25,15 +25,12 @@ do_reset() {
|
||||
}
|
||||
|
||||
fail() { # mesg
|
||||
do_reset
|
||||
echo $1
|
||||
exit_fail
|
||||
}
|
||||
|
||||
SLEEP_TIME=".1"
|
||||
|
||||
do_reset
|
||||
|
||||
echo "Testing function probes with events:"
|
||||
|
||||
EVENT="sched:sched_switch"
|
||||
|
@ -0,0 +1,24 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# description: ftrace - function trace on module
|
||||
|
||||
[ ! -f set_ftrace_filter ] && exit_unsupported
|
||||
|
||||
: "mod: allows to filter a non exist function"
|
||||
echo 'non_exist_func:mod:non_exist_module' > set_ftrace_filter
|
||||
grep -q "non_exist_func" set_ftrace_filter
|
||||
|
||||
: "mod: on exist module"
|
||||
echo '*:mod:trace_printk' > set_ftrace_filter
|
||||
if ! modprobe trace-printk ; then
|
||||
echo "No trace-printk sample module - please make CONFIG_SAMPLE_TRACE_PRINTK=
|
||||
m"
|
||||
exit_unresolved;
|
||||
fi
|
||||
|
||||
: "Wildcard should be resolved after loading module"
|
||||
grep -q "trace_printk_irq_work" set_ftrace_filter
|
||||
|
||||
: "After removing the filter becomes empty"
|
||||
rmmod trace_printk
|
||||
test `cat set_ftrace_filter | wc -l` -eq 0
|
@ -0,0 +1,22 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# description: ftrace - function profiling
|
||||
|
||||
[ ! -f function_profile_enabled ] && exit_unsupported
|
||||
|
||||
: "Enable function profile"
|
||||
echo 1 > function_profile_enabled
|
||||
|
||||
: "Profile must be updated"
|
||||
cp trace_stat/function0 $TMPDIR/
|
||||
( echo "forked"; sleep 1 )
|
||||
: "diff returns 0 if there is no difference"
|
||||
! diff trace_stat/function0 $TMPDIR/function0
|
||||
|
||||
echo 0 > function_profile_enabled
|
||||
|
||||
: "Profile must NOT be updated"
|
||||
cp trace_stat/function0 $TMPDIR/
|
||||
( echo "forked"; sleep 1 )
|
||||
: "diff returns 0 if there is no difference"
|
||||
diff trace_stat/function0 $TMPDIR/function0
|
@ -29,8 +29,6 @@ if [ ! -f function_profile_enabled ]; then
|
||||
fi
|
||||
|
||||
fail() { # mesg
|
||||
reset_tracer
|
||||
echo > set_ftrace_filter
|
||||
echo $1
|
||||
exit_fail
|
||||
}
|
||||
@ -76,6 +74,4 @@ if ! grep -v -e '^#' -e 'schedule' trace > /dev/null; then
|
||||
fail "no other functions besides schedule was found"
|
||||
fi
|
||||
|
||||
reset_tracer
|
||||
|
||||
exit 0
|
||||
|
@ -15,22 +15,11 @@ if [ ! -f set_ftrace_filter ]; then
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
do_reset() {
|
||||
reset_tracer
|
||||
reset_ftrace_filter
|
||||
disable_events
|
||||
clear_trace
|
||||
enable_tracing
|
||||
}
|
||||
|
||||
fail() { # mesg
|
||||
do_reset
|
||||
echo $1
|
||||
exit_fail
|
||||
}
|
||||
|
||||
do_reset
|
||||
|
||||
FILTER=set_ftrace_filter
|
||||
FUNC1="schedule"
|
||||
FUNC2="do_softirq"
|
||||
@ -165,6 +154,4 @@ test_actual
|
||||
rm $TMPDIR/expected
|
||||
rm $TMPDIR/actual
|
||||
|
||||
do_reset
|
||||
|
||||
exit 0
|
||||
|
@ -0,0 +1,39 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# description: ftrace - Max stack tracer
|
||||
# Test the basic function of max-stack usage tracing
|
||||
|
||||
if [ ! -f stack_trace ]; then
|
||||
echo "Max stack tracer is not supported - please make CONFIG_STACK_TRACER=y"
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
echo > stack_trace_filter
|
||||
echo 0 > stack_max_size
|
||||
echo 1 > /proc/sys/kernel/stack_tracer_enabled
|
||||
|
||||
: "Fork and wait for the first entry become !lock"
|
||||
timeout=10
|
||||
while [ $timeout -ne 0 ]; do
|
||||
( echo "forked" )
|
||||
FL=`grep " 0)" stack_trace`
|
||||
echo $FL | grep -q "lock" || break;
|
||||
timeout=$((timeout - 1))
|
||||
done
|
||||
echo 0 > /proc/sys/kernel/stack_tracer_enabled
|
||||
|
||||
echo '*lock*' > stack_trace_filter
|
||||
test `cat stack_trace_filter | wc -l` -eq `grep lock stack_trace_filter | wc -l`
|
||||
|
||||
echo 0 > stack_max_size
|
||||
echo 1 > /proc/sys/kernel/stack_tracer_enabled
|
||||
|
||||
: "Fork and always the first entry including lock"
|
||||
timeout=10
|
||||
while [ $timeout -ne 0 ]; do
|
||||
( echo "forked" )
|
||||
FL=`grep " 0)" stack_trace`
|
||||
echo $FL | grep -q "lock"
|
||||
timeout=$((timeout - 1))
|
||||
done
|
||||
echo 0 > /proc/sys/kernel/stack_tracer_enabled
|
@ -16,24 +16,13 @@ if [ ! -f set_ftrace_filter ]; then
|
||||
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() {
|
||||
|
@ -89,12 +89,23 @@ initialize_ftrace() { # Reset ftrace to initial-state
|
||||
reset_tracer
|
||||
reset_trigger
|
||||
reset_events_filter
|
||||
reset_ftrace_filter
|
||||
disable_events
|
||||
echo > set_event_pid # event tracer is always on
|
||||
echo > set_ftrace_pid
|
||||
[ -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
|
||||
[ -f synthetic_events ] && echo > synthetic_events
|
||||
[ -f snapshot ] && echo 0 > snapshot
|
||||
clear_trace
|
||||
enable_tracing
|
||||
}
|
||||
|
||||
LOCALHOST=127.0.0.1
|
||||
|
||||
yield() {
|
||||
ping $LOCALHOST -c 1 || sleep .001 || usleep 1 || sleep 1
|
||||
}
|
||||
|
@ -4,10 +4,7 @@
|
||||
|
||||
[ -f kprobe_events ] || exit_unsupported # this is configurable
|
||||
|
||||
echo 0 > events/enable
|
||||
echo > kprobe_events
|
||||
echo p:myevent _do_fork > kprobe_events
|
||||
grep myevent kprobe_events
|
||||
test -d events/kprobes/myevent
|
||||
echo > kprobe_events
|
||||
clear_trace
|
||||
|
@ -4,12 +4,9 @@
|
||||
|
||||
[ -f kprobe_events ] || exit_unsupported
|
||||
|
||||
echo 0 > events/enable
|
||||
echo > kprobe_events
|
||||
echo p:myevent _do_fork > kprobe_events
|
||||
test -d events/kprobes/myevent
|
||||
echo 1 > events/kprobes/myevent/enable
|
||||
echo > kprobe_events && exit_fail # this must fail
|
||||
echo 0 > events/kprobes/myevent/enable
|
||||
echo > kprobe_events # this must succeed
|
||||
clear_trace
|
||||
|
@ -4,13 +4,15 @@
|
||||
|
||||
[ -f kprobe_events ] || exit_unsupported # this is configurable
|
||||
|
||||
echo 0 > events/enable
|
||||
echo > kprobe_events
|
||||
echo 'p:testprobe _do_fork $stack $stack0 +0($stack)' > kprobe_events
|
||||
grep testprobe kprobe_events
|
||||
grep testprobe kprobe_events | grep -q 'arg1=\$stack arg2=\$stack0 arg3=+0(\$stack)'
|
||||
test -d events/kprobes/testprobe
|
||||
|
||||
echo 1 > events/kprobes/testprobe/enable
|
||||
( echo "forked")
|
||||
grep testprobe trace | grep '_do_fork' | \
|
||||
grep -q 'arg1=0x[[:xdigit:]]* arg2=0x[[:xdigit:]]* arg3=0x[[:xdigit:]]*$'
|
||||
|
||||
echo 0 > events/kprobes/testprobe/enable
|
||||
echo "-:testprobe" >> kprobe_events
|
||||
clear_trace
|
||||
|
@ -0,0 +1,17 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# description: Kprobe event with comm arguments
|
||||
|
||||
[ -f kprobe_events ] || exit_unsupported # this is configurable
|
||||
|
||||
grep -A1 "fetcharg:" README | grep -q "\$comm" || exit_unsupported # this is too old
|
||||
|
||||
echo 'p:testprobe _do_fork comm=$comm ' > kprobe_events
|
||||
grep testprobe kprobe_events | grep -q 'comm=$comm'
|
||||
test -d events/kprobes/testprobe
|
||||
|
||||
echo 1 > events/kprobes/testprobe/enable
|
||||
( echo "forked")
|
||||
grep testprobe trace | grep -q 'comm=".*"'
|
||||
|
||||
exit 0
|
@ -4,9 +4,6 @@
|
||||
|
||||
[ -f kprobe_events ] || exit_unsupported # this is configurable
|
||||
|
||||
echo 0 > events/enable
|
||||
echo > kprobe_events
|
||||
|
||||
case `uname -m` in
|
||||
x86_64)
|
||||
ARG1=%di
|
||||
@ -44,5 +41,3 @@ echo 1 > events/kprobes/testprobe/enable
|
||||
echo "p:test _do_fork" >> kprobe_events
|
||||
grep -qe "testprobe.* arg1=\"test\" arg2=\"test\"" trace
|
||||
|
||||
echo 0 > events/enable
|
||||
echo > kprobe_events
|
||||
|
@ -0,0 +1,39 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# description: Kprobe event symbol argument
|
||||
|
||||
[ -f kprobe_events ] || exit_unsupported # this is configurable
|
||||
|
||||
SYMBOL="linux_proc_banner"
|
||||
|
||||
if [ ! -f /proc/kallsyms ]; then
|
||||
echo "Can not check the target symbol - please enable CONFIG_KALLSYMS"
|
||||
exit_unresolved
|
||||
elif ! grep "$SYMBOL\$" /proc/kallsyms; then
|
||||
echo "Linux banner is not exported - please enable CONFIG_KALLSYMS_ALL"
|
||||
exit_unresolved
|
||||
fi
|
||||
|
||||
: "Test get basic types symbol argument"
|
||||
echo "p:testprobe_u _do_fork arg1=@linux_proc_banner:u64 arg2=@linux_proc_banner:u32 arg3=@linux_proc_banner:u16 arg4=@linux_proc_banner:u8" > kprobe_events
|
||||
echo "p:testprobe_s _do_fork arg1=@linux_proc_banner:s64 arg2=@linux_proc_banner:s32 arg3=@linux_proc_banner:s16 arg4=@linux_proc_banner:s8" >> kprobe_events
|
||||
if grep -q "x8/16/32/64" README; then
|
||||
echo "p:testprobe_x _do_fork arg1=@linux_proc_banner:x64 arg2=@linux_proc_banner:x32 arg3=@linux_proc_banner:x16 arg4=@linux_proc_banner:x8" >> kprobe_events
|
||||
fi
|
||||
echo "p:testprobe_bf _do_fork arg1=@linux_proc_banner:b8@4/32" >> kprobe_events
|
||||
echo 1 > events/kprobes/enable
|
||||
(echo "forked")
|
||||
echo 0 > events/kprobes/enable
|
||||
grep "testprobe_[usx]:.* arg1=.* arg2=.* arg3=.* arg4=.*" trace
|
||||
grep "testprobe_bf:.* arg1=.*" trace
|
||||
|
||||
: "Test get string symbol argument"
|
||||
echo "p:testprobe_str _do_fork arg1=@linux_proc_banner:string" > kprobe_events
|
||||
echo 1 > events/kprobes/enable
|
||||
(echo "forked")
|
||||
echo 0 > events/kprobes/enable
|
||||
RESULT=`grep "testprobe_str" trace | sed -e 's/.* arg1=\(.*\)/\1/'`
|
||||
|
||||
RESULT=`echo $RESULT | sed -e 's/.* \((.*)\) \((.*)\) .*/\1 \2/'`
|
||||
ORIG=`cat /proc/version | sed -e 's/.* \((.*)\) \((.*)\) .*/\1 \2/'`
|
||||
test "$RESULT" = "$ORIG"
|
@ -6,9 +6,6 @@
|
||||
|
||||
grep "x8/16/32/64" README > /dev/null || exit_unsupported # version issue
|
||||
|
||||
echo 0 > events/enable
|
||||
echo > kprobe_events
|
||||
|
||||
PROBEFUNC="vfs_read"
|
||||
GOODREG=
|
||||
BADREG=
|
||||
@ -78,8 +75,11 @@ test_badarg "\$stackp" "\$stack0+10" "\$stack1-10"
|
||||
echo "r ${PROBEFUNC} \$retval" > kprobe_events
|
||||
! echo "p ${PROBEFUNC} \$retval" > kprobe_events
|
||||
|
||||
# $comm was introduced in 4.8, older kernels reject it.
|
||||
if grep -A1 "fetcharg:" README | grep -q '\$comm' ; then
|
||||
: "Comm access"
|
||||
test_goodarg "\$comm"
|
||||
fi
|
||||
|
||||
: "Indirect memory access"
|
||||
test_goodarg "+0(${GOODREG})" "-0(${GOODREG})" "+10(\$stack)" \
|
||||
@ -100,5 +100,3 @@ test_badarg "${GOODREG}::${GOODTYPE}" "${GOODREG}:${BADTYPE}" \
|
||||
|
||||
test_goodarg "\$comm:string" "+0(\$stack):string"
|
||||
test_badarg "\$comm:x64" "\$stack:string" "${GOODREG}:string"
|
||||
|
||||
echo > kprobe_events
|
||||
|
@ -6,33 +6,45 @@
|
||||
|
||||
grep "x8/16/32/64" README > /dev/null || exit_unsupported # version issue
|
||||
|
||||
echo 0 > events/enable
|
||||
echo > kprobe_events
|
||||
enable_tracing
|
||||
gen_event() { # Bitsize
|
||||
echo "p:testprobe _do_fork \$stack0:s$1 \$stack0:u$1 \$stack0:x$1 \$stack0:b4@4/$1"
|
||||
}
|
||||
|
||||
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`
|
||||
check_types() { # s-type u-type x-type bf-type width
|
||||
test $# -eq 5
|
||||
CW=$5
|
||||
CW=$((CW / 4))
|
||||
X1=`printf "%x" $1 | tail -c ${CW}`
|
||||
X2=`printf "%x" $2`
|
||||
X3=`printf "%x" $3`
|
||||
test $X1 = $X2
|
||||
test $X2 = $X3
|
||||
test 0x$X3 = $3
|
||||
|
||||
B4=`printf "%02x" $4`
|
||||
B3=`echo -n $X3 | tail -c 3 | head -c 2`
|
||||
B4=`printf "%1x" $4`
|
||||
B3=`printf "%03x" 0x$X3 | tail -c 2 | head -c 1`
|
||||
test $B3 = $B4
|
||||
}
|
||||
check_types $ARGS
|
||||
|
||||
echo "-:testprobe" >> kprobe_events
|
||||
clear_trace
|
||||
test -d events/kprobes/testprobe && exit_fail || exit_pass
|
||||
for width in 64 32 16 8; do
|
||||
: "Add new event with basic types"
|
||||
gen_event $width > kprobe_events
|
||||
grep testprobe kprobe_events
|
||||
test -d events/kprobes/testprobe
|
||||
|
||||
: "Trace the event"
|
||||
echo 1 > events/kprobes/testprobe/enable
|
||||
( echo "forked")
|
||||
echo 0 > events/kprobes/testprobe/enable
|
||||
|
||||
: "Confirm the arguments is recorded in given types correctly"
|
||||
ARGS=`grep "testprobe" trace | sed -e 's/.* arg1=\(.*\) arg2=\(.*\) arg3=\(.*\) arg4=\(.*\)/\1 \2 \3 \4/'`
|
||||
check_types $ARGS $width
|
||||
|
||||
: "Clear event for next loop"
|
||||
echo "-:testprobe" >> kprobe_events
|
||||
clear_trace
|
||||
|
||||
done
|
||||
|
||||
exit_pass
|
||||
|
@ -4,9 +4,6 @@
|
||||
|
||||
[ -f kprobe_events ] || exit_unsupported # this is configurable
|
||||
|
||||
disable_events
|
||||
echo > kprobe_events
|
||||
|
||||
:;: "Add an event on function without name" ;:
|
||||
|
||||
FUNC=`grep " [tT] .*vfs_read$" /proc/kallsyms | tail -n 1 | cut -f 3 -d " "`
|
||||
@ -33,5 +30,3 @@ echo "p $FUNC" > kprobe_events
|
||||
EVENT=`grep $FUNC kprobe_events | cut -f 1 -d " " | cut -f 2 -d:`
|
||||
[ "x" != "x$EVENT" ] || exit_failure
|
||||
test -d events/$EVENT || exit_failure
|
||||
|
||||
echo > kprobe_events
|
||||
|
@ -8,8 +8,6 @@ grep function available_tracers || exit_unsupported # this is configurable
|
||||
# prepare
|
||||
echo nop > current_tracer
|
||||
echo _do_fork > set_ftrace_filter
|
||||
echo 0 > events/enable
|
||||
echo > kprobe_events
|
||||
echo 'p:testprobe _do_fork' > kprobe_events
|
||||
|
||||
# kprobe on / ftrace off
|
||||
@ -47,10 +45,3 @@ echo > trace
|
||||
( echo "forked")
|
||||
grep testprobe trace
|
||||
! grep '_do_fork <-' trace
|
||||
|
||||
# cleanup
|
||||
echo nop > current_tracer
|
||||
echo > set_ftrace_filter
|
||||
echo 0 > events/kprobes/testprobe/enable
|
||||
echo > kprobe_events
|
||||
echo > trace
|
||||
|
@ -4,14 +4,18 @@
|
||||
|
||||
[ -f kprobe_events ] || exit_unsupported # this is configurable
|
||||
|
||||
disable_events
|
||||
echo > kprobe_events
|
||||
rmmod trace-printk ||:
|
||||
if ! modprobe trace-printk ; then
|
||||
echo "No trace-printk sample module - please make CONFIG_SAMPLE_TRACE_PRINTK=
|
||||
m"
|
||||
exit_unresolved;
|
||||
fi
|
||||
|
||||
MOD=trace_printk
|
||||
FUNC=trace_printk_irq_work
|
||||
|
||||
:;: "Add an event on a module function without specifying event name" ;:
|
||||
|
||||
MOD=`lsmod | head -n 2 | tail -n 1 | cut -f1 -d" "`
|
||||
FUNC=`grep -m 1 ".* t .*\\[$MOD\\]" /proc/kallsyms | xargs | cut -f3 -d" "`
|
||||
[ "x" != "x$MOD" -a "y" != "y$FUNC" ] || exit_unresolved
|
||||
echo "p $MOD:$FUNC" > kprobe_events
|
||||
PROBE_NAME=`echo $MOD:$FUNC | tr ".:" "_"`
|
||||
test -d events/kprobes/p_${PROBE_NAME}_0 || exit_failure
|
||||
@ -26,4 +30,24 @@ test -d events/kprobes/event1 || exit_failure
|
||||
echo "p:kprobes1/event1 $MOD:$FUNC" > kprobe_events
|
||||
test -d events/kprobes1/event1 || exit_failure
|
||||
|
||||
echo > kprobe_events
|
||||
:;: "Remove target module, but event still be there" ;:
|
||||
if ! rmmod trace-printk ; then
|
||||
echo "Failed to unload module - please enable CONFIG_MODULE_UNLOAD"
|
||||
exit_unresolved;
|
||||
fi
|
||||
test -d events/kprobes1/event1
|
||||
|
||||
:;: "Check posibility to defining events on unloaded module";:
|
||||
echo "p:event2 $MOD:$FUNC" >> kprobe_events
|
||||
|
||||
:;: "Target is gone, but we can prepare for next time";:
|
||||
echo 1 > events/kprobes1/event1/enable
|
||||
|
||||
:;: "Load module again, which means the event1 should be recorded";:
|
||||
modprobe trace-printk
|
||||
grep "event1:" trace
|
||||
|
||||
:;: "Remove the module again and check the event is not locked"
|
||||
rmmod trace-printk
|
||||
echo 0 > events/kprobes1/event1/enable
|
||||
echo "-:kprobes1/event1" >> kprobe_events
|
||||
|
@ -4,13 +4,16 @@
|
||||
|
||||
[ -f kprobe_events ] || exit_unsupported # this is configurable
|
||||
|
||||
echo 0 > events/enable
|
||||
echo > kprobe_events
|
||||
# Add new kretprobe event
|
||||
echo 'r:testprobe2 _do_fork $retval' > kprobe_events
|
||||
grep testprobe2 kprobe_events
|
||||
grep testprobe2 kprobe_events | grep -q 'arg1=\$retval'
|
||||
test -d events/kprobes/testprobe2
|
||||
|
||||
echo 1 > events/kprobes/testprobe2/enable
|
||||
( echo "forked")
|
||||
|
||||
cat trace | grep testprobe2 | grep -q '<- _do_fork'
|
||||
|
||||
echo 0 > events/kprobes/testprobe2/enable
|
||||
echo '-:testprobe2' >> kprobe_events
|
||||
clear_trace
|
||||
|
@ -5,8 +5,6 @@
|
||||
[ -f kprobe_events ] || exit_unsupported # this is configurable
|
||||
grep -q 'r\[maxactive\]' README || exit_unsupported # this is older version
|
||||
|
||||
echo > kprobe_events
|
||||
|
||||
# Test if we successfully reject unknown messages
|
||||
if echo 'a:myprobeaccept inet_csk_accept' > kprobe_events; then false; else true; fi
|
||||
|
||||
@ -37,5 +35,3 @@ echo > kprobe_events
|
||||
echo 'r10 inet_csk_accept' > kprobe_events
|
||||
grep inet_csk_accept kprobe_events
|
||||
echo > kprobe_events
|
||||
|
||||
clear_trace
|
||||
|
@ -12,11 +12,6 @@ case `uname -m` in
|
||||
*) OFFS=0;;
|
||||
esac
|
||||
|
||||
if [ -d events/kprobes ]; then
|
||||
echo 0 > events/kprobes/enable
|
||||
echo > kprobe_events
|
||||
fi
|
||||
|
||||
N=0
|
||||
echo "Setup up kprobes on first available 256 text symbols"
|
||||
grep -i " t " /proc/kallsyms | cut -f3 -d" " | grep -v .*\\..* | \
|
||||
|
@ -30,8 +30,6 @@ if [ `printf "%x" -1 | wc -c` != 9 ]; then
|
||||
UINT_TEST=yes
|
||||
fi
|
||||
|
||||
echo 0 > events/enable
|
||||
echo > kprobe_events
|
||||
echo "p:testprobe ${TARGET_FUNC}" > kprobe_events
|
||||
echo "p:testprobe ${TARGET}" > kprobe_events
|
||||
echo "p:testprobe ${TARGET_FUNC}${NEXT}" > kprobe_events
|
||||
@ -39,5 +37,3 @@ echo "p:testprobe ${TARGET_FUNC}${NEXT}" > kprobe_events
|
||||
if [ "${UINT_TEST}" = yes ]; then
|
||||
! echo "p:testprobe ${TARGET_FUNC}${OVERFLOW}" > kprobe_events
|
||||
fi
|
||||
echo > kprobe_events
|
||||
clear_trace
|
||||
|
15
tools/testing/selftests/ftrace/test.d/kprobe/profile.tc
Normal file
15
tools/testing/selftests/ftrace/test.d/kprobe/profile.tc
Normal file
@ -0,0 +1,15 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# description: Kprobe dynamic event - adding and removing
|
||||
|
||||
[ -f kprobe_events ] || exit_unsupported # this is configurable
|
||||
|
||||
! grep -q 'myevent' kprobe_profile
|
||||
echo p:myevent _do_fork > kprobe_events
|
||||
grep -q 'myevent[[:space:]]*0[[:space:]]*0$' kprobe_profile
|
||||
echo 1 > events/kprobes/myevent/enable
|
||||
( echo "forked" )
|
||||
grep -q 'myevent[[:space:]]*[[:digit:]]*[[:space:]]*0$' kprobe_profile
|
||||
echo 0 > events/kprobes/myevent/enable
|
||||
echo > kprobe_events
|
||||
! grep -q 'myevent' kprobe_profile
|
@ -1,4 +1,5 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL2.0
|
||||
# description: %HERE DESCRIBE WHAT THIS DOES%
|
||||
# you have to add ".tc" extention for your testcase file
|
||||
# Note that all tests are run with "errexit" option.
|
||||
|
25
tools/testing/selftests/ftrace/test.d/tracer/wakeup.tc
Normal file
25
tools/testing/selftests/ftrace/test.d/tracer/wakeup.tc
Normal file
@ -0,0 +1,25 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL2.0
|
||||
# description: Test wakeup tracer
|
||||
|
||||
if ! which chrt ; then
|
||||
echo "chrt is not found. This test requires nice command."
|
||||
exit_unresolved
|
||||
fi
|
||||
|
||||
if ! grep -wq "wakeup" available_tracers ; then
|
||||
echo "wakeup tracer is not supported"
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
echo wakeup > current_tracer
|
||||
echo 1 > tracing_on
|
||||
echo 0 > tracing_max_latency
|
||||
|
||||
: "Wakeup higher priority task"
|
||||
chrt -f 5 sleep 1
|
||||
|
||||
echo 0 > tracing_on
|
||||
grep '+ \[[[:digit:]]*\]' trace
|
||||
grep '==> \[[[:digit:]]*\]' trace
|
||||
|
25
tools/testing/selftests/ftrace/test.d/tracer/wakeup_rt.tc
Normal file
25
tools/testing/selftests/ftrace/test.d/tracer/wakeup_rt.tc
Normal file
@ -0,0 +1,25 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL2.0
|
||||
# description: Test wakeup RT tracer
|
||||
|
||||
if ! which chrt ; then
|
||||
echo "chrt is not found. This test requires chrt command."
|
||||
exit_unresolved
|
||||
fi
|
||||
|
||||
if ! grep -wq "wakeup_rt" available_tracers ; then
|
||||
echo "wakeup_rt tracer is not supported"
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
echo wakeup_rt > current_tracer
|
||||
echo 1 > tracing_on
|
||||
echo 0 > tracing_max_latency
|
||||
|
||||
: "Wakeup a realtime task"
|
||||
chrt -f 5 sleep 1
|
||||
|
||||
echo 0 > tracing_on
|
||||
grep "+ \[[[:digit:]]*\]" trace
|
||||
grep "==> \[[[:digit:]]*\]" trace
|
||||
|
@ -2,14 +2,7 @@
|
||||
# description: event trigger - test extended error support
|
||||
|
||||
|
||||
do_reset() {
|
||||
reset_trigger
|
||||
echo > set_event
|
||||
clear_trace
|
||||
}
|
||||
|
||||
fail() { #msg
|
||||
do_reset
|
||||
echo $1
|
||||
exit_fail
|
||||
}
|
||||
@ -24,9 +17,6 @@ if [ ! -f synthetic_events ]; then
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
reset_tracer
|
||||
do_reset
|
||||
|
||||
echo "Test extended error support"
|
||||
echo 'hist:keys=pid:ts0=common_timestamp.usecs if comm=="ping"' > events/sched/sched_wakeup/trigger
|
||||
! echo 'hist:keys=pid:ts0=common_timestamp.usecs if comm=="ping"' >> events/sched/sched_wakeup/trigger 2> /dev/null
|
||||
@ -34,6 +24,4 @@ if ! grep -q "ERROR:" events/sched/sched_wakeup/hist; then
|
||||
fail "Failed to generate extended error in histogram"
|
||||
fi
|
||||
|
||||
do_reset
|
||||
|
||||
exit 0
|
||||
|
@ -1,14 +1,7 @@
|
||||
#!/bin/sh
|
||||
# description: event trigger - test field variable support
|
||||
|
||||
do_reset() {
|
||||
reset_trigger
|
||||
echo > set_event
|
||||
clear_trace
|
||||
}
|
||||
|
||||
fail() { #msg
|
||||
do_reset
|
||||
echo $1
|
||||
exit_fail
|
||||
}
|
||||
@ -23,10 +16,6 @@ if [ ! -f synthetic_events ]; then
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
clear_synthetic_events
|
||||
reset_tracer
|
||||
do_reset
|
||||
|
||||
echo "Test field variable support"
|
||||
|
||||
echo 'wakeup_latency u64 lat; pid_t pid; int prio; char comm[16]' > synthetic_events
|
||||
@ -34,7 +23,7 @@ echo 'hist:keys=comm:ts0=common_timestamp.usecs if comm=="ping"' > events/sched/
|
||||
echo 'hist:keys=next_comm:wakeup_lat=common_timestamp.usecs-$ts0:onmatch(sched.sched_waking).wakeup_latency($wakeup_lat,next_pid,sched.sched_waking.prio,next_comm) if next_comm=="ping"' > events/sched/sched_switch/trigger
|
||||
echo 'hist:keys=pid,prio,comm:vals=lat:sort=pid,prio' > events/synthetic/wakeup_latency/trigger
|
||||
|
||||
ping localhost -c 3
|
||||
ping $LOCALHOST -c 3
|
||||
if ! grep -q "ping" events/synthetic/wakeup_latency/hist; then
|
||||
fail "Failed to create inter-event histogram"
|
||||
fi
|
||||
@ -49,6 +38,4 @@ if grep -q "synthetic_prio=prio" events/sched/sched_waking/hist; then
|
||||
fail "Failed to remove histogram with field variable"
|
||||
fi
|
||||
|
||||
do_reset
|
||||
|
||||
exit 0
|
||||
|
@ -1,14 +1,7 @@
|
||||
#!/bin/sh
|
||||
# description: event trigger - test inter-event combined histogram trigger
|
||||
|
||||
do_reset() {
|
||||
reset_trigger
|
||||
echo > set_event
|
||||
clear_trace
|
||||
}
|
||||
|
||||
fail() { #msg
|
||||
do_reset
|
||||
echo $1
|
||||
exit_fail
|
||||
}
|
||||
@ -23,10 +16,6 @@ if [ ! -f synthetic_events ]; then
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
reset_tracer
|
||||
do_reset
|
||||
clear_synthetic_events
|
||||
|
||||
echo "Test create synthetic event"
|
||||
|
||||
echo 'waking_latency u64 lat pid_t pid' > synthetic_events
|
||||
@ -48,11 +37,9 @@ echo 'waking+wakeup_latency u64 lat; pid_t pid' >> synthetic_events
|
||||
echo 'hist:keys=pid,lat:sort=pid,lat:ww_lat=$waking_lat+$wakeup_lat:onmatch(synthetic.wakeup_latency).waking+wakeup_latency($ww_lat,pid)' >> events/synthetic/wakeup_latency/trigger
|
||||
echo 'hist:keys=pid,lat:sort=pid,lat' >> events/synthetic/waking+wakeup_latency/trigger
|
||||
|
||||
ping localhost -c 3
|
||||
ping $LOCALHOST -c 3
|
||||
if ! grep -q "pid:" events/synthetic/waking+wakeup_latency/hist; then
|
||||
fail "Failed to create combined histogram"
|
||||
fi
|
||||
|
||||
do_reset
|
||||
|
||||
exit 0
|
||||
|
@ -1,15 +1,7 @@
|
||||
#!/bin/sh
|
||||
# description: event trigger - test multiple actions on hist trigger
|
||||
|
||||
|
||||
do_reset() {
|
||||
reset_trigger
|
||||
echo > set_event
|
||||
clear_trace
|
||||
}
|
||||
|
||||
fail() { #msg
|
||||
do_reset
|
||||
echo $1
|
||||
exit_fail
|
||||
}
|
||||
@ -24,10 +16,6 @@ if [ ! -f synthetic_events ]; then
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
clear_synthetic_events
|
||||
reset_tracer
|
||||
do_reset
|
||||
|
||||
echo "Test multiple actions on hist trigger"
|
||||
echo 'wakeup_latency u64 lat; pid_t pid' >> synthetic_events
|
||||
TRIGGER1=events/sched/sched_wakeup/trigger
|
||||
@ -39,6 +27,4 @@ echo 'hist:keys=next_pid:onmatch(sched.sched_wakeup).wakeup_latency(sched.sched_
|
||||
echo 'hist:keys=next_pid:onmatch(sched.sched_wakeup).wakeup_latency(sched.sched_switch.$wakeup_lat,prev_pid) if next_comm=="cyclictest"' >> $TRIGGER2
|
||||
echo 'hist:keys=next_pid if next_comm=="cyclictest"' >> $TRIGGER2
|
||||
|
||||
do_reset
|
||||
|
||||
exit 0
|
||||
|
@ -1,14 +1,7 @@
|
||||
#!/bin/sh
|
||||
# description: event trigger - test inter-event histogram trigger onmatch action
|
||||
|
||||
do_reset() {
|
||||
reset_trigger
|
||||
echo > set_event
|
||||
clear_trace
|
||||
}
|
||||
|
||||
fail() { #msg
|
||||
do_reset
|
||||
echo $1
|
||||
exit_fail
|
||||
}
|
||||
@ -23,10 +16,6 @@ if [ ! -f synthetic_events ]; then
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
clear_synthetic_events
|
||||
reset_tracer
|
||||
do_reset
|
||||
|
||||
echo "Test create synthetic event"
|
||||
|
||||
echo 'wakeup_latency u64 lat pid_t pid char comm[16]' > synthetic_events
|
||||
@ -40,11 +29,10 @@ echo "Test histogram variables,simple expression support and onmatch action"
|
||||
echo 'hist:keys=pid:ts0=common_timestamp.usecs if comm=="ping"' > events/sched/sched_wakeup/trigger
|
||||
echo 'hist:keys=next_pid:wakeup_lat=common_timestamp.usecs-$ts0:onmatch(sched.sched_wakeup).wakeup_latency($wakeup_lat,next_pid,next_comm) if next_comm=="ping"' > events/sched/sched_switch/trigger
|
||||
echo 'hist:keys=comm,pid,lat:wakeup_lat=lat:sort=lat' > events/synthetic/wakeup_latency/trigger
|
||||
ping localhost -c 5
|
||||
|
||||
ping $LOCALHOST -c 5
|
||||
if ! grep -q "ping" events/synthetic/wakeup_latency/hist; then
|
||||
fail "Failed to create onmatch action inter-event histogram"
|
||||
fi
|
||||
|
||||
do_reset
|
||||
|
||||
exit 0
|
||||
|
@ -1,14 +1,7 @@
|
||||
#!/bin/sh
|
||||
# description: event trigger - test inter-event histogram trigger onmatch-onmax action
|
||||
|
||||
do_reset() {
|
||||
reset_trigger
|
||||
echo > set_event
|
||||
clear_trace
|
||||
}
|
||||
|
||||
fail() { #msg
|
||||
do_reset
|
||||
echo $1
|
||||
exit_fail
|
||||
}
|
||||
@ -23,10 +16,6 @@ if [ ! -f synthetic_events ]; then
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
clear_synthetic_events
|
||||
reset_tracer
|
||||
do_reset
|
||||
|
||||
echo "Test create synthetic event"
|
||||
|
||||
echo 'wakeup_latency u64 lat pid_t pid char comm[16]' > synthetic_events
|
||||
@ -40,11 +29,10 @@ echo "Test histogram variables,simple expression support and onmatch-onmax actio
|
||||
echo 'hist:keys=pid:ts0=common_timestamp.usecs if comm=="ping"' > events/sched/sched_wakeup/trigger
|
||||
echo 'hist:keys=next_pid:wakeup_lat=common_timestamp.usecs-$ts0:onmatch(sched.sched_wakeup).wakeup_latency($wakeup_lat,next_pid,next_comm):onmax($wakeup_lat).save(next_comm,prev_pid,prev_prio,prev_comm) if next_comm=="ping"' >> events/sched/sched_switch/trigger
|
||||
echo 'hist:keys=comm,pid,lat:wakeup_lat=lat:sort=lat' > events/synthetic/wakeup_latency/trigger
|
||||
ping localhost -c 5
|
||||
|
||||
ping $LOCALHOST -c 5
|
||||
if [ ! grep -q "ping" events/synthetic/wakeup_latency/hist -o ! grep -q "max:" events/sched/sched_switch/hist]; then
|
||||
fail "Failed to create onmatch-onmax action inter-event histogram"
|
||||
fi
|
||||
|
||||
do_reset
|
||||
|
||||
exit 0
|
||||
|
@ -1,14 +1,7 @@
|
||||
#!/bin/sh
|
||||
# description: event trigger - test inter-event histogram trigger onmax action
|
||||
|
||||
do_reset() {
|
||||
reset_trigger
|
||||
echo > set_event
|
||||
clear_trace
|
||||
}
|
||||
|
||||
fail() { #msg
|
||||
do_reset
|
||||
echo $1
|
||||
exit_fail
|
||||
}
|
||||
@ -23,10 +16,6 @@ if [ ! -f synthetic_events ]; then
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
clear_synthetic_events
|
||||
reset_tracer
|
||||
do_reset
|
||||
|
||||
echo "Test create synthetic event"
|
||||
|
||||
echo 'wakeup_latency u64 lat pid_t pid char comm[16]' > synthetic_events
|
||||
@ -38,11 +27,10 @@ echo "Test onmax action"
|
||||
|
||||
echo 'hist:keys=pid:ts0=common_timestamp.usecs if comm=="ping"' >> events/sched/sched_waking/trigger
|
||||
echo 'hist:keys=next_pid:wakeup_lat=common_timestamp.usecs-$ts0:onmax($wakeup_lat).save(next_comm,prev_pid,prev_prio,prev_comm) if next_comm=="ping"' >> events/sched/sched_switch/trigger
|
||||
ping localhost -c 3
|
||||
|
||||
ping $LOCALHOST -c 3
|
||||
if ! grep -q "max:" events/sched/sched_switch/hist; then
|
||||
fail "Failed to create onmax action inter-event histogram"
|
||||
fi
|
||||
|
||||
do_reset
|
||||
|
||||
exit 0
|
||||
|
@ -1,13 +1,7 @@
|
||||
#!/bin/sh
|
||||
# description: event trigger - test synthetic event create remove
|
||||
do_reset() {
|
||||
reset_trigger
|
||||
echo > set_event
|
||||
clear_trace
|
||||
}
|
||||
|
||||
fail() { #msg
|
||||
do_reset
|
||||
echo $1
|
||||
exit_fail
|
||||
}
|
||||
@ -22,10 +16,6 @@ if [ ! -f synthetic_events ]; then
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
clear_synthetic_events
|
||||
reset_tracer
|
||||
do_reset
|
||||
|
||||
echo "Test create synthetic event"
|
||||
|
||||
echo 'wakeup_latency u64 lat pid_t pid char comm[16]' > synthetic_events
|
||||
@ -49,6 +39,4 @@ if [ -d events/synthetic/wakeup_latency ]; then
|
||||
fail "Failed to delete wakeup_latency synthetic event"
|
||||
fi
|
||||
|
||||
do_reset
|
||||
|
||||
exit 0
|
||||
|
@ -3,14 +3,7 @@
|
||||
# description: event trigger - test event enable/disable trigger
|
||||
# flags: instance
|
||||
|
||||
do_reset() {
|
||||
reset_trigger
|
||||
echo > set_event
|
||||
clear_trace
|
||||
}
|
||||
|
||||
fail() { #msg
|
||||
do_reset
|
||||
echo $1
|
||||
exit_fail
|
||||
}
|
||||
@ -25,9 +18,6 @@ if [ ! -f events/sched/sched_process_fork/trigger ]; then
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
reset_tracer
|
||||
do_reset
|
||||
|
||||
FEATURE=`grep enable_event events/sched/sched_process_fork/trigger`
|
||||
if [ -z "$FEATURE" ]; then
|
||||
echo "event enable/disable trigger is not supported"
|
||||
@ -61,6 +51,4 @@ echo 'enable_event:sched:sched_switch' > events/sched/sched_process_fork/trigger
|
||||
! echo 'enable_event:sched:sched_switch' > events/sched/sched_process_fork/trigger
|
||||
! echo 'disable_event:sched:sched_switch' > events/sched/sched_process_fork/trigger
|
||||
|
||||
do_reset
|
||||
|
||||
exit 0
|
||||
|
@ -3,14 +3,7 @@
|
||||
# description: event trigger - test trigger filter
|
||||
# flags: instance
|
||||
|
||||
do_reset() {
|
||||
reset_trigger
|
||||
echo > set_event
|
||||
clear_trace
|
||||
}
|
||||
|
||||
fail() { #msg
|
||||
do_reset
|
||||
echo $1
|
||||
exit_fail
|
||||
}
|
||||
@ -25,9 +18,6 @@ if [ ! -f events/sched/sched_process_fork/trigger ]; then
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
reset_tracer
|
||||
do_reset
|
||||
|
||||
echo "Test trigger filter"
|
||||
echo 1 > tracing_on
|
||||
echo 'traceoff if child_pid == 0' > events/sched/sched_process_fork/trigger
|
||||
@ -54,8 +44,4 @@ echo '!traceoff' > events/sched/sched_process_fork/trigger
|
||||
echo 'traceoff if parent_pid >= 0 || child_pid >= 0' > events/sched/sched_process_fork/trigger
|
||||
echo '!traceoff' > events/sched/sched_process_fork/trigger
|
||||
|
||||
|
||||
|
||||
do_reset
|
||||
|
||||
exit 0
|
||||
|
@ -3,14 +3,7 @@
|
||||
# description: event trigger - test histogram modifiers
|
||||
# flags: instance
|
||||
|
||||
do_reset() {
|
||||
reset_trigger
|
||||
echo > set_event
|
||||
clear_trace
|
||||
}
|
||||
|
||||
fail() { #msg
|
||||
do_reset
|
||||
echo $1
|
||||
exit_fail
|
||||
}
|
||||
@ -30,9 +23,6 @@ if [ ! -f events/sched/sched_process_fork/hist ]; then
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
reset_tracer
|
||||
do_reset
|
||||
|
||||
echo "Test histogram with execname modifier"
|
||||
|
||||
echo 'hist:keys=common_pid.execname' > events/sched/sched_process_fork/trigger
|
||||
@ -71,6 +61,4 @@ for i in `seq 1 10` ; do ( echo "forked" > /dev/null); done
|
||||
grep 'bytes_req: ~ 2^[0-9]*' events/kmem/kmalloc/hist > /dev/null || \
|
||||
fail "log2 modifier on kmem/kmalloc did not work"
|
||||
|
||||
do_reset
|
||||
|
||||
exit 0
|
||||
|
@ -3,14 +3,7 @@
|
||||
# description: event trigger - test histogram trigger
|
||||
# flags: instance
|
||||
|
||||
do_reset() {
|
||||
reset_trigger
|
||||
echo > set_event
|
||||
clear_trace
|
||||
}
|
||||
|
||||
fail() { #msg
|
||||
do_reset
|
||||
echo $1
|
||||
exit_fail
|
||||
}
|
||||
@ -30,9 +23,6 @@ if [ ! -f events/sched/sched_process_fork/hist ]; then
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
reset_tracer
|
||||
do_reset
|
||||
|
||||
echo "Test histogram basic tigger"
|
||||
|
||||
echo 'hist:keys=parent_pid:vals=child_pid' > events/sched/sched_process_fork/trigger
|
||||
@ -79,6 +69,4 @@ check_inc `grep -o "child_pid:[[:space:]]*[[:digit:]]*" \
|
||||
events/sched/sched_process_fork/hist | cut -d: -f2 ` ||
|
||||
fail "sort param on sched_process_fork did not work"
|
||||
|
||||
do_reset
|
||||
|
||||
exit 0
|
||||
|
@ -3,14 +3,7 @@
|
||||
# description: event trigger - test multiple histogram triggers
|
||||
# flags: instance
|
||||
|
||||
do_reset() {
|
||||
reset_trigger
|
||||
echo > set_event
|
||||
clear_trace
|
||||
}
|
||||
|
||||
fail() { #msg
|
||||
do_reset
|
||||
echo $1
|
||||
exit_fail
|
||||
}
|
||||
@ -30,11 +23,6 @@ if [ ! -f events/sched/sched_process_fork/hist ]; then
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
reset_tracer
|
||||
do_reset
|
||||
|
||||
reset_trigger
|
||||
|
||||
echo "Test histogram multiple tiggers"
|
||||
|
||||
echo 'hist:keys=parent_pid:vals=child_pid' > events/sched/sched_process_fork/trigger
|
||||
@ -67,8 +55,4 @@ grep test_hist events/sched/sched_process_exit/hist > /dev/null || \
|
||||
diffs=`diff events/sched/sched_process_exit/hist events/sched/sched_process_fork/hist | wc -l`
|
||||
test $diffs -eq 0 || fail "Same name histograms are not same"
|
||||
|
||||
reset_trigger
|
||||
|
||||
do_reset
|
||||
|
||||
exit 0
|
||||
|
@ -2,14 +2,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# description: event trigger - test snapshot-trigger
|
||||
|
||||
do_reset() {
|
||||
reset_trigger
|
||||
echo > set_event
|
||||
clear_trace
|
||||
}
|
||||
|
||||
fail() { #msg
|
||||
do_reset
|
||||
echo $1
|
||||
exit_fail
|
||||
}
|
||||
@ -29,9 +22,6 @@ if [ ! -f snapshot ]; then
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
reset_tracer
|
||||
do_reset
|
||||
|
||||
FEATURE=`grep snapshot events/sched/sched_process_fork/trigger`
|
||||
if [ -z "$FEATURE" ]; then
|
||||
echo "snapshot trigger is not supported"
|
||||
@ -57,6 +47,4 @@ echo "Test snapshot semantic errors"
|
||||
echo "snapshot" > events/sched/sched_process_fork/trigger
|
||||
! echo "snapshot" > events/sched/sched_process_fork/trigger
|
||||
|
||||
do_reset
|
||||
|
||||
exit 0
|
||||
|
@ -2,14 +2,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# description: event trigger - test stacktrace-trigger
|
||||
|
||||
do_reset() {
|
||||
reset_trigger
|
||||
echo > set_event
|
||||
clear_trace
|
||||
}
|
||||
|
||||
fail() { #msg
|
||||
do_reset
|
||||
echo $1
|
||||
exit_fail
|
||||
}
|
||||
@ -24,9 +17,6 @@ if [ ! -f events/sched/sched_process_fork/trigger ]; then
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
reset_tracer
|
||||
do_reset
|
||||
|
||||
FEATURE=`grep stacktrace events/sched/sched_process_fork/trigger`
|
||||
if [ -z "$FEATURE" ]; then
|
||||
echo "stacktrace trigger is not supported"
|
||||
@ -49,6 +39,4 @@ echo "Test stacktrace semantic errors"
|
||||
echo "stacktrace" > events/sched/sched_process_fork/trigger
|
||||
! echo "stacktrace" > events/sched/sched_process_fork/trigger
|
||||
|
||||
do_reset
|
||||
|
||||
exit 0
|
||||
|
@ -3,14 +3,7 @@
|
||||
# description: trace_marker trigger - test histogram trigger
|
||||
# flags: instance
|
||||
|
||||
do_reset() {
|
||||
reset_trigger
|
||||
echo > set_event
|
||||
clear_trace
|
||||
}
|
||||
|
||||
fail() { #msg
|
||||
do_reset
|
||||
echo $1
|
||||
exit_fail
|
||||
}
|
||||
@ -35,8 +28,6 @@ if [ ! -f events/ftrace/print/hist ]; then
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
do_reset
|
||||
|
||||
echo "Test histogram trace_marker tigger"
|
||||
|
||||
echo 'hist:keys=common_pid' > events/ftrace/print/trigger
|
||||
@ -44,6 +35,4 @@ for i in `seq 1 10` ; do echo "hello" > trace_marker; done
|
||||
grep 'hitcount: *10$' events/ftrace/print/hist > /dev/null || \
|
||||
fail "hist trigger did not trigger correct times on trace_marker"
|
||||
|
||||
do_reset
|
||||
|
||||
exit 0
|
||||
|
@ -3,15 +3,7 @@
|
||||
# description: trace_marker trigger - test snapshot trigger
|
||||
# flags: instance
|
||||
|
||||
do_reset() {
|
||||
reset_trigger
|
||||
echo > set_event
|
||||
echo 0 > snapshot
|
||||
clear_trace
|
||||
}
|
||||
|
||||
fail() { #msg
|
||||
do_reset
|
||||
echo $1
|
||||
exit_fail
|
||||
}
|
||||
@ -47,15 +39,13 @@ test_trace() {
|
||||
fi
|
||||
echo "testing $line for >$x<"
|
||||
match=`echo $line | sed -e "s/>$x<//"`
|
||||
if [ "$line" == "$match" ]; then
|
||||
if [ "$line" = "$match" ]; then
|
||||
fail "$line does not have >$x< in it"
|
||||
fi
|
||||
let x=$x+2
|
||||
x=$((x+2))
|
||||
done
|
||||
}
|
||||
|
||||
do_reset
|
||||
|
||||
echo "Test snapshot trace_marker tigger"
|
||||
|
||||
echo 'snapshot' > events/ftrace/print/trigger
|
||||
@ -69,6 +59,4 @@ for i in `seq 1 10` ; do echo "hello >$i<" > trace_marker; done
|
||||
test_trace trace 1
|
||||
test_trace snapshot 2
|
||||
|
||||
do_reset
|
||||
|
||||
exit 0
|
||||
|
@ -3,15 +3,7 @@
|
||||
# description: trace_marker trigger - test histogram with synthetic event against kernel event
|
||||
# flags:
|
||||
|
||||
do_reset() {
|
||||
reset_trigger
|
||||
echo > set_event
|
||||
echo > synthetic_events
|
||||
clear_trace
|
||||
}
|
||||
|
||||
fail() { #msg
|
||||
do_reset
|
||||
echo $1
|
||||
exit_fail
|
||||
}
|
||||
@ -46,8 +38,6 @@ if [ ! -f events/ftrace/print/hist ]; then
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
do_reset
|
||||
|
||||
echo "Test histogram kernel event to trace_marker latency histogram trigger"
|
||||
|
||||
echo 'latency u64 lat' > synthetic_events
|
||||
@ -63,6 +53,4 @@ grep 'hitcount: *1$' events/ftrace/print/hist > /dev/null || \
|
||||
grep 'hitcount: *1$' events/synthetic/latency/hist > /dev/null || \
|
||||
fail "hist trigger did not trigger "
|
||||
|
||||
do_reset
|
||||
|
||||
exit 0
|
||||
|
@ -3,15 +3,7 @@
|
||||
# description: trace_marker trigger - test histogram with synthetic event
|
||||
# flags:
|
||||
|
||||
do_reset() {
|
||||
reset_trigger
|
||||
echo > set_event
|
||||
echo > synthetic_events
|
||||
clear_trace
|
||||
}
|
||||
|
||||
fail() { #msg
|
||||
do_reset
|
||||
echo $1
|
||||
exit_fail
|
||||
}
|
||||
@ -41,8 +33,6 @@ if [ ! -f events/ftrace/print/hist ]; then
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
do_reset
|
||||
|
||||
echo "Test histogram trace_marker to trace_marker latency histogram trigger"
|
||||
|
||||
echo 'latency u64 lat' > synthetic_events
|
||||
@ -61,6 +51,4 @@ fi
|
||||
grep 'hitcount: *1$' events/synthetic/latency/hist > /dev/null || \
|
||||
fail "hist trigger did not trigger "
|
||||
|
||||
do_reset
|
||||
|
||||
exit 0
|
||||
|
@ -2,14 +2,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# description: event trigger - test traceon/off trigger
|
||||
|
||||
do_reset() {
|
||||
reset_trigger
|
||||
echo > set_event
|
||||
clear_trace
|
||||
}
|
||||
|
||||
fail() { #msg
|
||||
do_reset
|
||||
echo $1
|
||||
exit_fail
|
||||
}
|
||||
@ -24,9 +17,6 @@ if [ ! -f events/sched/sched_process_fork/trigger ]; then
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
reset_tracer
|
||||
do_reset
|
||||
|
||||
echo "Test traceoff trigger"
|
||||
echo 1 > tracing_on
|
||||
echo 'traceoff' > events/sched/sched_process_fork/trigger
|
||||
@ -54,6 +44,4 @@ echo 'traceon' > events/sched/sched_process_fork/trigger
|
||||
! echo 'traceon' > events/sched/sched_process_fork/trigger
|
||||
! echo 'traceoff' > events/sched/sched_process_fork/trigger
|
||||
|
||||
do_reset
|
||||
|
||||
exit 0
|
||||
|
@ -1,28 +1,26 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
TEST_PROGS := gpio-mockup.sh
|
||||
TEST_FILES := gpio-mockup-sysfs.sh $(BINARIES)
|
||||
BINARIES := gpio-mockup-chardev
|
||||
EXTRA_PROGS := ../gpiogpio-event-mon ../gpiogpio-hammer ../gpiolsgpio
|
||||
EXTRA_DIRS := ../gpioinclude/
|
||||
EXTRA_OBJS := ../gpiogpio-event-mon-in.o ../gpiogpio-event-mon.o
|
||||
EXTRA_OBJS += ../gpiogpio-hammer-in.o ../gpiogpio-utils.o ../gpiolsgpio-in.o
|
||||
EXTRA_OBJS += ../gpiolsgpio.o
|
||||
|
||||
include ../lib.mk
|
||||
|
||||
all: $(BINARIES)
|
||||
|
||||
override define CLEAN
|
||||
$(RM) $(BINARIES) $(EXTRA_PROGS) $(EXTRA_OBJS)
|
||||
$(RM) -r $(EXTRA_DIRS)
|
||||
endef
|
||||
|
||||
CFLAGS += -O2 -g -std=gnu99 -Wall -I../../../../usr/include/
|
||||
LDLIBS += -lmount -I/usr/include/libmount
|
||||
|
||||
$(BINARIES):| khdr
|
||||
$(BINARIES): ../../../gpio/gpio-utils.o
|
||||
TEST_PROGS := gpio-mockup.sh
|
||||
TEST_FILES := gpio-mockup-sysfs.sh
|
||||
TEST_PROGS_EXTENDED := gpio-mockup-chardev
|
||||
|
||||
../../../gpio/gpio-utils.o:
|
||||
make ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) -C ../../../gpio
|
||||
GPIODIR := $(realpath ../../../gpio)
|
||||
GPIOOBJ := gpio-utils.o
|
||||
|
||||
include ../lib.mk
|
||||
|
||||
all: $(TEST_PROGS_EXTENDED)
|
||||
|
||||
override define CLEAN
|
||||
$(RM) $(TEST_PROGS_EXTENDED)
|
||||
$(MAKE) -C $(GPIODIR) OUTPUT=$(GPIODIR)/ clean
|
||||
endef
|
||||
|
||||
$(TEST_PROGS_EXTENDED):| khdr
|
||||
$(TEST_PROGS_EXTENDED): $(GPIODIR)/$(GPIOOBJ)
|
||||
|
||||
$(GPIODIR)/$(GPIOOBJ):
|
||||
$(MAKE) OUTPUT=$(GPIODIR)/ -C $(GPIODIR)
|
||||
|
@ -33,10 +33,10 @@
|
||||
#define TEST_PAGES_PER_LOOP 1024
|
||||
|
||||
/* How many host loops to run (one KVM_GET_DIRTY_LOG for each loop) */
|
||||
#define TEST_HOST_LOOP_N 32
|
||||
#define TEST_HOST_LOOP_N 32UL
|
||||
|
||||
/* Interval for each host loop (ms) */
|
||||
#define TEST_HOST_LOOP_INTERVAL 10
|
||||
#define TEST_HOST_LOOP_INTERVAL 10UL
|
||||
|
||||
/*
|
||||
* Guest/Host shared variables. Ensure addr_gva2hva() and/or
|
||||
|
@ -128,7 +128,7 @@ struct kvm_vm *vm_create(enum vm_guest_mode mode, uint64_t phy_pages, int perm)
|
||||
int kvm_fd;
|
||||
|
||||
vm = calloc(1, sizeof(*vm));
|
||||
TEST_ASSERT(vm != NULL, "Insufficent Memory");
|
||||
TEST_ASSERT(vm != NULL, "Insufficient Memory");
|
||||
|
||||
vm->mode = mode;
|
||||
vm_open(vm, perm);
|
||||
|
@ -14,7 +14,7 @@
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
// Test /proc/*/fd lookup.
|
||||
#define _GNU_SOURCE
|
||||
|
||||
#undef NDEBUG
|
||||
#include <assert.h>
|
||||
#include <dirent.h>
|
||||
|
@ -14,7 +14,7 @@
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
// Test that /proc/$KERNEL_THREAD/fd/ is empty.
|
||||
#define _GNU_SOURCE
|
||||
|
||||
#undef NDEBUG
|
||||
#include <sys/syscall.h>
|
||||
#include <assert.h>
|
||||
|
@ -19,7 +19,7 @@
|
||||
|
||||
int fd;
|
||||
const char v = 'V';
|
||||
static const char sopts[] = "bdehp:t:";
|
||||
static const char sopts[] = "bdehp:t:Tn:N";
|
||||
static const struct option lopts[] = {
|
||||
{"bootstatus", no_argument, NULL, 'b'},
|
||||
{"disable", no_argument, NULL, 'd'},
|
||||
@ -27,6 +27,9 @@ static const struct option lopts[] = {
|
||||
{"help", no_argument, NULL, 'h'},
|
||||
{"pingrate", required_argument, NULL, 'p'},
|
||||
{"timeout", required_argument, NULL, 't'},
|
||||
{"gettimeout", no_argument, NULL, 'T'},
|
||||
{"pretimeout", required_argument, NULL, 'n'},
|
||||
{"getpretimeout", no_argument, NULL, 'N'},
|
||||
{NULL, no_argument, NULL, 0x0}
|
||||
};
|
||||
|
||||
@ -71,9 +74,13 @@ static void usage(char *progname)
|
||||
printf(" -h, --help Print the help message\n");
|
||||
printf(" -p, --pingrate=P Set ping rate to P seconds (default %d)\n", DEFAULT_PING_RATE);
|
||||
printf(" -t, --timeout=T Set timeout to T seconds\n");
|
||||
printf(" -T, --gettimeout Get the timeout\n");
|
||||
printf(" -n, --pretimeout=T Set the pretimeout to T seconds\n");
|
||||
printf(" -N, --getpretimeout Get the pretimeout\n");
|
||||
printf("\n");
|
||||
printf("Parameters are parsed left-to-right in real-time.\n");
|
||||
printf("Example: %s -d -t 10 -p 5 -e\n", progname);
|
||||
printf("Example: %s -t 12 -T -n 7 -N\n", progname);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
@ -89,7 +96,13 @@ int main(int argc, char *argv[])
|
||||
fd = open("/dev/watchdog", O_WRONLY);
|
||||
|
||||
if (fd == -1) {
|
||||
printf("Watchdog device not enabled.\n");
|
||||
if (errno == ENOENT)
|
||||
printf("Watchdog device not enabled.\n");
|
||||
else if (errno == EACCES)
|
||||
printf("Run watchdog as root.\n");
|
||||
else
|
||||
printf("Watchdog device open failed %s\n",
|
||||
strerror(errno));
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
@ -103,23 +116,27 @@ int main(int argc, char *argv[])
|
||||
printf("Last boot is caused by: %s.\n", (flags != 0) ?
|
||||
"Watchdog" : "Power-On-Reset");
|
||||
else
|
||||
printf("WDIOC_GETBOOTSTATUS errno '%s'\n", strerror(errno));
|
||||
printf("WDIOC_GETBOOTSTATUS error '%s'\n", strerror(errno));
|
||||
break;
|
||||
case 'd':
|
||||
flags = WDIOS_DISABLECARD;
|
||||
ret = ioctl(fd, WDIOC_SETOPTIONS, &flags);
|
||||
if (!ret)
|
||||
printf("Watchdog card disabled.\n");
|
||||
else
|
||||
printf("WDIOS_DISABLECARD errno '%s'\n", strerror(errno));
|
||||
else {
|
||||
printf("WDIOS_DISABLECARD error '%s'\n", strerror(errno));
|
||||
oneshot = 1;
|
||||
}
|
||||
break;
|
||||
case 'e':
|
||||
flags = WDIOS_ENABLECARD;
|
||||
ret = ioctl(fd, WDIOC_SETOPTIONS, &flags);
|
||||
if (!ret)
|
||||
printf("Watchdog card enabled.\n");
|
||||
else
|
||||
printf("WDIOS_ENABLECARD errno '%s'\n", strerror(errno));
|
||||
else {
|
||||
printf("WDIOS_ENABLECARD error '%s'\n", strerror(errno));
|
||||
oneshot = 1;
|
||||
}
|
||||
break;
|
||||
case 'p':
|
||||
ping_rate = strtoul(optarg, NULL, 0);
|
||||
@ -132,8 +149,36 @@ int main(int argc, char *argv[])
|
||||
ret = ioctl(fd, WDIOC_SETTIMEOUT, &flags);
|
||||
if (!ret)
|
||||
printf("Watchdog timeout set to %u seconds.\n", flags);
|
||||
else {
|
||||
printf("WDIOC_SETTIMEOUT error '%s'\n", strerror(errno));
|
||||
oneshot = 1;
|
||||
}
|
||||
break;
|
||||
case 'T':
|
||||
oneshot = 1;
|
||||
ret = ioctl(fd, WDIOC_GETTIMEOUT, &flags);
|
||||
if (!ret)
|
||||
printf("WDIOC_GETTIMEOUT returns %u seconds.\n", flags);
|
||||
else
|
||||
printf("WDIOC_SETTIMEOUT errno '%s'\n", strerror(errno));
|
||||
printf("WDIOC_GETTIMEOUT error '%s'\n", strerror(errno));
|
||||
break;
|
||||
case 'n':
|
||||
flags = strtoul(optarg, NULL, 0);
|
||||
ret = ioctl(fd, WDIOC_SETPRETIMEOUT, &flags);
|
||||
if (!ret)
|
||||
printf("Watchdog pretimeout set to %u seconds.\n", flags);
|
||||
else {
|
||||
printf("WDIOC_SETPRETIMEOUT error '%s'\n", strerror(errno));
|
||||
oneshot = 1;
|
||||
}
|
||||
break;
|
||||
case 'N':
|
||||
oneshot = 1;
|
||||
ret = ioctl(fd, WDIOC_GETPRETIMEOUT, &flags);
|
||||
if (!ret)
|
||||
printf("WDIOC_GETPRETIMEOUT returns %u seconds.\n", flags);
|
||||
else
|
||||
printf("WDIOC_GETPRETIMEOUT error '%s'\n", strerror(errno));
|
||||
break;
|
||||
default:
|
||||
usage(argv[0]);
|
||||
|
Loading…
Reference in New Issue
Block a user