1646f01ccSSteven Rostedt (VMware)#!/bin/sh 2646f01ccSSteven Rostedt (VMware)# SPDX-License-Identifier: GPL-2.0 3646f01ccSSteven Rostedt (VMware)# description: Test ftrace direct functions against kprobes 43591e90fSMasami Hiramatsu# requires: kprobe_events 5646f01ccSSteven Rostedt (VMware) 6646f01ccSSteven Rostedt (VMware)rmmod ftrace-direct ||: 7646f01ccSSteven Rostedt (VMware)if ! modprobe ftrace-direct ; then 8646f01ccSSteven Rostedt (VMware) echo "No ftrace-direct sample module - please build with CONFIG_SAMPLE_FTRACE_DIRECT=m" 9646f01ccSSteven Rostedt (VMware) exit_unresolved; 10646f01ccSSteven Rostedt (VMware)fi 11646f01ccSSteven Rostedt (VMware) 12646f01ccSSteven Rostedt (VMware)echo "Let the module run a little" 13646f01ccSSteven Rostedt (VMware)sleep 1 14646f01ccSSteven Rostedt (VMware) 15760f8bc7SColin Ian Kinggrep -q "my_direct_func: waking up" trace 16646f01ccSSteven Rostedt (VMware) 17646f01ccSSteven Rostedt (VMware)rmmod ftrace-direct 18646f01ccSSteven Rostedt (VMware) 19646f01ccSSteven Rostedt (VMware)echo 'p:kwake wake_up_process task=$arg1' > kprobe_events 20646f01ccSSteven Rostedt (VMware) 21646f01ccSSteven Rostedt (VMware)start_direct() { 22646f01ccSSteven Rostedt (VMware) echo > trace 23646f01ccSSteven Rostedt (VMware) modprobe ftrace-direct 24646f01ccSSteven Rostedt (VMware) sleep 1 25760f8bc7SColin Ian King grep -q "my_direct_func: waking up" trace 26646f01ccSSteven Rostedt (VMware)} 27646f01ccSSteven Rostedt (VMware) 28646f01ccSSteven Rostedt (VMware)stop_direct() { 29646f01ccSSteven Rostedt (VMware) rmmod ftrace-direct 30646f01ccSSteven Rostedt (VMware)} 31646f01ccSSteven Rostedt (VMware) 32646f01ccSSteven Rostedt (VMware)enable_probe() { 33646f01ccSSteven Rostedt (VMware) echo > trace 34646f01ccSSteven Rostedt (VMware) echo 1 > events/kprobes/kwake/enable 35646f01ccSSteven Rostedt (VMware) sleep 1 36646f01ccSSteven Rostedt (VMware) grep -q "kwake:" trace 37646f01ccSSteven Rostedt (VMware)} 38646f01ccSSteven Rostedt (VMware) 39646f01ccSSteven Rostedt (VMware)disable_probe() { 40646f01ccSSteven Rostedt (VMware) echo 0 > events/kprobes/kwake/enable 41646f01ccSSteven Rostedt (VMware)} 42646f01ccSSteven Rostedt (VMware) 43ed9dafebSSteven Rostedt (VMware)test_kprobes() { 44646f01ccSSteven Rostedt (VMware) # probe -> direct -> no direct > no probe 45646f01ccSSteven Rostedt (VMware) enable_probe 46646f01ccSSteven Rostedt (VMware) start_direct 47646f01ccSSteven Rostedt (VMware) stop_direct 48646f01ccSSteven Rostedt (VMware) disable_probe 49646f01ccSSteven Rostedt (VMware) 50646f01ccSSteven Rostedt (VMware) # probe -> direct -> no probe > no direct 51646f01ccSSteven Rostedt (VMware) enable_probe 52646f01ccSSteven Rostedt (VMware) start_direct 53646f01ccSSteven Rostedt (VMware) disable_probe 54646f01ccSSteven Rostedt (VMware) stop_direct 55646f01ccSSteven Rostedt (VMware) 56646f01ccSSteven Rostedt (VMware) # direct -> probe -> no probe > no direct 57646f01ccSSteven Rostedt (VMware) start_direct 58646f01ccSSteven Rostedt (VMware) enable_probe 59646f01ccSSteven Rostedt (VMware) disable_probe 60646f01ccSSteven Rostedt (VMware) stop_direct 61646f01ccSSteven Rostedt (VMware) 62646f01ccSSteven Rostedt (VMware) # direct -> probe -> no direct > no noprobe 63646f01ccSSteven Rostedt (VMware) start_direct 64646f01ccSSteven Rostedt (VMware) enable_probe 65646f01ccSSteven Rostedt (VMware) stop_direct 66646f01ccSSteven Rostedt (VMware) disable_probe 67ed9dafebSSteven Rostedt (VMware)} 68ed9dafebSSteven Rostedt (VMware) 69ed9dafebSSteven Rostedt (VMware)test_kprobes 70ed9dafebSSteven Rostedt (VMware) 71ed9dafebSSteven Rostedt (VMware)# Now do this with a second registered direct function 72ed9dafebSSteven Rostedt (VMware)echo "Running with another ftrace direct function" 73ed9dafebSSteven Rostedt (VMware) 74ed9dafebSSteven Rostedt (VMware)modprobe ftrace-direct-too 75ed9dafebSSteven Rostedt (VMware) 76ed9dafebSSteven Rostedt (VMware)test_kprobes 77ed9dafebSSteven Rostedt (VMware) 78ed9dafebSSteven Rostedt (VMware)rmmod ftrace-direct-too 79646f01ccSSteven Rostedt (VMware) 80646f01ccSSteven Rostedt (VMware)echo > kprobe_events 81