18c2ecf20Sopenharmony_ci#!/bin/sh
28c2ecf20Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
38c2ecf20Sopenharmony_ci# description: Test ftrace direct functions against tracers
48c2ecf20Sopenharmony_ci
58c2ecf20Sopenharmony_cirmmod ftrace-direct ||:
68c2ecf20Sopenharmony_ciif ! modprobe ftrace-direct ; then
78c2ecf20Sopenharmony_ci  echo "No ftrace-direct sample module - please make CONFIG_SAMPLE_FTRACE_DIRECT=m"
88c2ecf20Sopenharmony_ci  exit_unresolved;
98c2ecf20Sopenharmony_cifi
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ciecho "Let the module run a little"
128c2ecf20Sopenharmony_cisleep 1
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_cigrep -q "my_direct_func: waking up" trace
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_cirmmod ftrace-direct
178c2ecf20Sopenharmony_ci
188c2ecf20Sopenharmony_citest_tracer() {
198c2ecf20Sopenharmony_ci	tracer=$1
208c2ecf20Sopenharmony_ci
218c2ecf20Sopenharmony_ci	# tracer -> direct -> no direct > no tracer
228c2ecf20Sopenharmony_ci	echo $tracer > current_tracer
238c2ecf20Sopenharmony_ci	modprobe ftrace-direct
248c2ecf20Sopenharmony_ci	rmmod ftrace-direct
258c2ecf20Sopenharmony_ci	echo nop > current_tracer
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_ci	# tracer -> direct -> no tracer > no direct
288c2ecf20Sopenharmony_ci	echo $tracer > current_tracer
298c2ecf20Sopenharmony_ci	modprobe ftrace-direct
308c2ecf20Sopenharmony_ci	echo nop > current_tracer
318c2ecf20Sopenharmony_ci	rmmod ftrace-direct
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_ci	# direct -> tracer -> no tracer > no direct
348c2ecf20Sopenharmony_ci	modprobe ftrace-direct
358c2ecf20Sopenharmony_ci	echo $tracer > current_tracer
368c2ecf20Sopenharmony_ci	echo nop > current_tracer
378c2ecf20Sopenharmony_ci	rmmod ftrace-direct
388c2ecf20Sopenharmony_ci
398c2ecf20Sopenharmony_ci	# direct -> tracer -> no direct > no notracer
408c2ecf20Sopenharmony_ci	modprobe ftrace-direct
418c2ecf20Sopenharmony_ci	echo $tracer > current_tracer
428c2ecf20Sopenharmony_ci	rmmod ftrace-direct
438c2ecf20Sopenharmony_ci	echo nop > current_tracer
448c2ecf20Sopenharmony_ci}
458c2ecf20Sopenharmony_ci
468c2ecf20Sopenharmony_cifor t in `cat available_tracers`; do
478c2ecf20Sopenharmony_ci	if [ "$t" != "nop" ]; then
488c2ecf20Sopenharmony_ci		test_tracer $t
498c2ecf20Sopenharmony_ci	fi
508c2ecf20Sopenharmony_cidone
518c2ecf20Sopenharmony_ci
528c2ecf20Sopenharmony_ciecho nop > current_tracer
538c2ecf20Sopenharmony_cirmmod ftrace-direct ||:
548c2ecf20Sopenharmony_ci
558c2ecf20Sopenharmony_ci# Now do the same thing with another direct function registered
568c2ecf20Sopenharmony_ciecho "Running with another ftrace direct function"
578c2ecf20Sopenharmony_ci
588c2ecf20Sopenharmony_cirmmod ftrace-direct-too ||:
598c2ecf20Sopenharmony_cimodprobe ftrace-direct-too
608c2ecf20Sopenharmony_ci
618c2ecf20Sopenharmony_cifor t in `cat available_tracers`; do
628c2ecf20Sopenharmony_ci	if [ "$t" != "nop" ]; then
638c2ecf20Sopenharmony_ci		test_tracer $t
648c2ecf20Sopenharmony_ci	fi
658c2ecf20Sopenharmony_cidone
668c2ecf20Sopenharmony_ci
678c2ecf20Sopenharmony_ciecho nop > current_tracer
688c2ecf20Sopenharmony_cirmmod ftrace-direct ||:
698c2ecf20Sopenharmony_cirmmod ftrace-direct-too ||:
70