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