1#!/bin/sh 2# SPDX-License-Identifier: GPL-2.0 3# description: Test ftrace direct functions against kprobes 4# requires: kprobe_events 5 6rmmod ftrace-direct ||: 7if ! modprobe ftrace-direct ; then 8 echo "No ftrace-direct sample module - please build with CONFIG_SAMPLE_FTRACE_DIRECT=m" 9 exit_unresolved; 10fi 11 12echo "Let the module run a little" 13sleep 1 14 15grep -q "my_direct_func: waking up" trace 16 17rmmod ftrace-direct 18 19echo 'p:kwake wake_up_process task=$arg1' > kprobe_events 20 21start_direct() { 22 echo > trace 23 modprobe ftrace-direct 24 sleep 1 25 grep -q "my_direct_func: waking up" trace 26} 27 28stop_direct() { 29 rmmod ftrace-direct 30} 31 32enable_probe() { 33 echo > trace 34 echo 1 > events/kprobes/kwake/enable 35 sleep 1 36 grep -q "kwake:" trace 37} 38 39disable_probe() { 40 echo 0 > events/kprobes/kwake/enable 41} 42 43test_kprobes() { 44 # probe -> direct -> no direct > no probe 45 enable_probe 46 start_direct 47 stop_direct 48 disable_probe 49 50 # probe -> direct -> no probe > no direct 51 enable_probe 52 start_direct 53 disable_probe 54 stop_direct 55 56 # direct -> probe -> no probe > no direct 57 start_direct 58 enable_probe 59 disable_probe 60 stop_direct 61 62 # direct -> probe -> no direct > no noprobe 63 start_direct 64 enable_probe 65 stop_direct 66 disable_probe 67} 68 69test_kprobes 70 71# Now do this with a second registered direct function 72echo "Running with another ftrace direct function" 73 74modprobe ftrace-direct-too 75 76test_kprobes 77 78rmmod ftrace-direct-too 79 80echo > kprobe_events 81