162306a36Sopenharmony_ci#!/bin/sh
262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
362306a36Sopenharmony_ci# description: Test ftrace direct functions against tracers
462306a36Sopenharmony_ci
562306a36Sopenharmony_cirmmod ftrace-direct ||:
662306a36Sopenharmony_ciif ! modprobe ftrace-direct ; then
762306a36Sopenharmony_ci  echo "No ftrace-direct sample module - please make CONFIG_SAMPLE_FTRACE_DIRECT=m"
862306a36Sopenharmony_ci  exit_unresolved;
962306a36Sopenharmony_cifi
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ciecho "Let the module run a little"
1262306a36Sopenharmony_cisleep 1
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_cigrep -q "my_direct_func: waking up" trace
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_cirmmod ftrace-direct
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_citest_tracer() {
1962306a36Sopenharmony_ci	tracer=$1
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci	# tracer -> direct -> no direct > no tracer
2262306a36Sopenharmony_ci	echo $tracer > current_tracer
2362306a36Sopenharmony_ci	modprobe ftrace-direct
2462306a36Sopenharmony_ci	rmmod ftrace-direct
2562306a36Sopenharmony_ci	echo nop > current_tracer
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci	# tracer -> direct -> no tracer > no direct
2862306a36Sopenharmony_ci	echo $tracer > current_tracer
2962306a36Sopenharmony_ci	modprobe ftrace-direct
3062306a36Sopenharmony_ci	echo nop > current_tracer
3162306a36Sopenharmony_ci	rmmod ftrace-direct
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ci	# direct -> tracer -> no tracer > no direct
3462306a36Sopenharmony_ci	modprobe ftrace-direct
3562306a36Sopenharmony_ci	echo $tracer > current_tracer
3662306a36Sopenharmony_ci	echo nop > current_tracer
3762306a36Sopenharmony_ci	rmmod ftrace-direct
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci	# direct -> tracer -> no direct > no notracer
4062306a36Sopenharmony_ci	modprobe ftrace-direct
4162306a36Sopenharmony_ci	echo $tracer > current_tracer
4262306a36Sopenharmony_ci	rmmod ftrace-direct
4362306a36Sopenharmony_ci	echo nop > current_tracer
4462306a36Sopenharmony_ci}
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_cifor t in `cat available_tracers`; do
4762306a36Sopenharmony_ci	if [ "$t" != "nop" ]; then
4862306a36Sopenharmony_ci		test_tracer $t
4962306a36Sopenharmony_ci	fi
5062306a36Sopenharmony_cidone
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ciecho nop > current_tracer
5362306a36Sopenharmony_cirmmod ftrace-direct ||:
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ci# Now do the same thing with another direct function registered
5662306a36Sopenharmony_ciecho "Running with another ftrace direct function"
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_cirmmod ftrace-direct-too ||:
5962306a36Sopenharmony_cimodprobe ftrace-direct-too
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_cifor t in `cat available_tracers`; do
6262306a36Sopenharmony_ci	if [ "$t" != "nop" ]; then
6362306a36Sopenharmony_ci		test_tracer $t
6462306a36Sopenharmony_ci	fi
6562306a36Sopenharmony_cidone
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ciecho nop > current_tracer
6862306a36Sopenharmony_cirmmod ftrace-direct ||:
6962306a36Sopenharmony_cirmmod ftrace-direct-too ||:
70