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