diff options
Diffstat (limited to 'tools/testing/selftests/ftrace/test.d/direct/kprobe-direct.tc')
-rw-r--r-- | tools/testing/selftests/ftrace/test.d/direct/kprobe-direct.tc | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/tools/testing/selftests/ftrace/test.d/direct/kprobe-direct.tc b/tools/testing/selftests/ftrace/test.d/direct/kprobe-direct.tc new file mode 100644 index 000000000000..f030dc80bcde --- /dev/null +++ b/tools/testing/selftests/ftrace/test.d/direct/kprobe-direct.tc @@ -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 |