mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-18 17:08:54 +07:00
ftrace/selftest: Add tests to test register_ftrace_direct()
Add two test cases that test the new ftrace direct functionality if the ftrace-direct sample module is available. One test case tests against each available tracer (function, function_graph, mmiotrace, etc), and the other test tests against a kprobe at the same location as the direct caller. Both tests follow the same pattern of testing combinations: enable test (either the tracer or the kprobe) load direct function module unload direct function module disable test enable test load direct function module disable test unload direct function module load direct function module enable test disable test unload direct function module load direct function module enable test unload direct function module disable test As most the bugs in development happened with various ways of enabling or disabling the direct calls with function tracer in one of these combinations. Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
This commit is contained in:
parent
b06457c83a
commit
646f01ccdd
@ -0,0 +1,53 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# description: Test ftrace direct functions against tracers
|
||||
|
||||
rmmod ftrace-direct ||:
|
||||
if ! modprobe ftrace-direct ; then
|
||||
echo "No ftrace-direct sample module - please make CONFIG_SAMPLE_FTRACE_DIRECT=m"
|
||||
exit_unresolved;
|
||||
fi
|
||||
|
||||
echo "Let the module run a little"
|
||||
sleep 1
|
||||
|
||||
grep -q "my_direct_func: wakeing up" trace
|
||||
|
||||
rmmod ftrace-direct
|
||||
|
||||
test_tracer() {
|
||||
tracer=$1
|
||||
|
||||
# tracer -> direct -> no direct > no tracer
|
||||
echo $tracer > current_tracer
|
||||
modprobe ftrace-direct
|
||||
rmmod ftrace-direct
|
||||
echo nop > current_tracer
|
||||
|
||||
# tracer -> direct -> no tracer > no direct
|
||||
echo $tracer > current_tracer
|
||||
modprobe ftrace-direct
|
||||
echo nop > current_tracer
|
||||
rmmod ftrace-direct
|
||||
|
||||
# direct -> tracer -> no tracer > no direct
|
||||
modprobe ftrace-direct
|
||||
echo $tracer > current_tracer
|
||||
echo nop > current_tracer
|
||||
rmmod ftrace-direct
|
||||
|
||||
# direct -> tracer -> no direct > no notracer
|
||||
modprobe ftrace-direct
|
||||
echo $tracer > current_tracer
|
||||
rmmod ftrace-direct
|
||||
echo nop > current_tracer
|
||||
}
|
||||
|
||||
for t in `cat available_tracers`; do
|
||||
if [ "$t" != "nop" ]; then
|
||||
test_tracer $t
|
||||
fi
|
||||
done
|
||||
|
||||
echo nop > current_tracer
|
||||
rmmod ftrace-direct ||:
|
@ -0,0 +1,71 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# description: Test ftrace direct functions against kprobes
|
||||
|
||||
rmmod ftrace-direct ||:
|
||||
if ! modprobe ftrace-direct ; then
|
||||
echo "No ftrace-direct sample module - please build with CONFIG_SAMPLE_FTRACE_DIRECT=m"
|
||||
exit_unresolved;
|
||||
fi
|
||||
|
||||
if [ ! -f kprobe_events ]; then
|
||||
echo "No kprobe_events file -please build CONFIG_KPROBE_EVENTS"
|
||||
exit_unresolved;
|
||||
fi
|
||||
|
||||
echo "Let the module run a little"
|
||||
sleep 1
|
||||
|
||||
grep -q "my_direct_func: wakeing up" trace
|
||||
|
||||
rmmod ftrace-direct
|
||||
|
||||
echo 'p:kwake wake_up_process task=$arg1' > kprobe_events
|
||||
|
||||
start_direct() {
|
||||
echo > trace
|
||||
modprobe ftrace-direct
|
||||
sleep 1
|
||||
grep -q "my_direct_func: wakeing up" trace
|
||||
}
|
||||
|
||||
stop_direct() {
|
||||
rmmod ftrace-direct
|
||||
}
|
||||
|
||||
enable_probe() {
|
||||
echo > trace
|
||||
echo 1 > events/kprobes/kwake/enable
|
||||
sleep 1
|
||||
grep -q "kwake:" trace
|
||||
}
|
||||
|
||||
disable_probe() {
|
||||
echo 0 > events/kprobes/kwake/enable
|
||||
}
|
||||
|
||||
# probe -> direct -> no direct > no probe
|
||||
enable_probe
|
||||
start_direct
|
||||
stop_direct
|
||||
disable_probe
|
||||
|
||||
# probe -> direct -> no probe > no direct
|
||||
enable_probe
|
||||
start_direct
|
||||
disable_probe
|
||||
stop_direct
|
||||
|
||||
# direct -> probe -> no probe > no direct
|
||||
start_direct
|
||||
enable_probe
|
||||
disable_probe
|
||||
stop_direct
|
||||
|
||||
# direct -> probe -> no direct > no noprobe
|
||||
start_direct
|
||||
enable_probe
|
||||
stop_direct
|
||||
disable_probe
|
||||
|
||||
echo > kprobe_events
|
Loading…
Reference in New Issue
Block a user