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