xref: /OK3568_Linux_fs/kernel/tools/testing/selftests/ftrace/test.d/direct/ftrace-direct.tc (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/bin/sh
2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0
3*4882a593Smuzhiyun# description: Test ftrace direct functions against tracers
4*4882a593Smuzhiyun
5*4882a593Smuzhiyunrmmod ftrace-direct ||:
6*4882a593Smuzhiyunif ! modprobe ftrace-direct ; then
7*4882a593Smuzhiyun  echo "No ftrace-direct sample module - please make CONFIG_SAMPLE_FTRACE_DIRECT=m"
8*4882a593Smuzhiyun  exit_unresolved;
9*4882a593Smuzhiyunfi
10*4882a593Smuzhiyun
11*4882a593Smuzhiyunecho "Let the module run a little"
12*4882a593Smuzhiyunsleep 1
13*4882a593Smuzhiyun
14*4882a593Smuzhiyungrep -q "my_direct_func: waking up" trace
15*4882a593Smuzhiyun
16*4882a593Smuzhiyunrmmod ftrace-direct
17*4882a593Smuzhiyun
18*4882a593Smuzhiyuntest_tracer() {
19*4882a593Smuzhiyun	tracer=$1
20*4882a593Smuzhiyun
21*4882a593Smuzhiyun	# tracer -> direct -> no direct > no tracer
22*4882a593Smuzhiyun	echo $tracer > current_tracer
23*4882a593Smuzhiyun	modprobe ftrace-direct
24*4882a593Smuzhiyun	rmmod ftrace-direct
25*4882a593Smuzhiyun	echo nop > current_tracer
26*4882a593Smuzhiyun
27*4882a593Smuzhiyun	# tracer -> direct -> no tracer > no direct
28*4882a593Smuzhiyun	echo $tracer > current_tracer
29*4882a593Smuzhiyun	modprobe ftrace-direct
30*4882a593Smuzhiyun	echo nop > current_tracer
31*4882a593Smuzhiyun	rmmod ftrace-direct
32*4882a593Smuzhiyun
33*4882a593Smuzhiyun	# direct -> tracer -> no tracer > no direct
34*4882a593Smuzhiyun	modprobe ftrace-direct
35*4882a593Smuzhiyun	echo $tracer > current_tracer
36*4882a593Smuzhiyun	echo nop > current_tracer
37*4882a593Smuzhiyun	rmmod ftrace-direct
38*4882a593Smuzhiyun
39*4882a593Smuzhiyun	# direct -> tracer -> no direct > no notracer
40*4882a593Smuzhiyun	modprobe ftrace-direct
41*4882a593Smuzhiyun	echo $tracer > current_tracer
42*4882a593Smuzhiyun	rmmod ftrace-direct
43*4882a593Smuzhiyun	echo nop > current_tracer
44*4882a593Smuzhiyun}
45*4882a593Smuzhiyun
46*4882a593Smuzhiyunfor t in `cat available_tracers`; do
47*4882a593Smuzhiyun	if [ "$t" != "nop" ]; then
48*4882a593Smuzhiyun		test_tracer $t
49*4882a593Smuzhiyun	fi
50*4882a593Smuzhiyundone
51*4882a593Smuzhiyun
52*4882a593Smuzhiyunecho nop > current_tracer
53*4882a593Smuzhiyunrmmod ftrace-direct ||:
54*4882a593Smuzhiyun
55*4882a593Smuzhiyun# Now do the same thing with another direct function registered
56*4882a593Smuzhiyunecho "Running with another ftrace direct function"
57*4882a593Smuzhiyun
58*4882a593Smuzhiyunrmmod ftrace-direct-too ||:
59*4882a593Smuzhiyunmodprobe ftrace-direct-too
60*4882a593Smuzhiyun
61*4882a593Smuzhiyunfor t in `cat available_tracers`; do
62*4882a593Smuzhiyun	if [ "$t" != "nop" ]; then
63*4882a593Smuzhiyun		test_tracer $t
64*4882a593Smuzhiyun	fi
65*4882a593Smuzhiyundone
66*4882a593Smuzhiyun
67*4882a593Smuzhiyunecho nop > current_tracer
68*4882a593Smuzhiyunrmmod ftrace-direct ||:
69*4882a593Smuzhiyunrmmod ftrace-direct-too ||:
70