| #!/bin/sh |
| # SPDX-License-Identifier: GPL-2.0 |
| # description: Test ftrace direct functions against kprobes |
| # requires: kprobe_events |
| |
| 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 |
| |
| echo "Let the module run a little" |
| sleep 1 |
| |
| grep -q "my_direct_func: waking 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: waking 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 |
| } |
| |
| test_kprobes() { |
| # 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 |
| } |
| |
| test_kprobes |
| |
| # Now do this with a second registered direct function |
| echo "Running with another ftrace direct function" |
| |
| modprobe ftrace-direct-too |
| |
| test_kprobes |
| |
| rmmod ftrace-direct-too |
| |
| echo > kprobe_events |