18c2ecf20Sopenharmony_ci#!/bin/sh
28c2ecf20Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
38c2ecf20Sopenharmony_ci# description: Test ftrace direct functions against kprobes
48c2ecf20Sopenharmony_ci# requires: kprobe_events
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_cirmmod ftrace-direct ||:
78c2ecf20Sopenharmony_ciif ! modprobe ftrace-direct ; then
88c2ecf20Sopenharmony_ci  echo "No ftrace-direct sample module - please build with CONFIG_SAMPLE_FTRACE_DIRECT=m"
98c2ecf20Sopenharmony_ci  exit_unresolved;
108c2ecf20Sopenharmony_cifi
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ciecho "Let the module run a little"
138c2ecf20Sopenharmony_cisleep 1
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_cigrep -q "my_direct_func: waking up" trace
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_cirmmod ftrace-direct
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ciecho 'p:kwake wake_up_process task=$arg1' > kprobe_events
208c2ecf20Sopenharmony_ci
218c2ecf20Sopenharmony_cistart_direct() {
228c2ecf20Sopenharmony_ci	echo > trace
238c2ecf20Sopenharmony_ci	modprobe ftrace-direct
248c2ecf20Sopenharmony_ci	sleep 1
258c2ecf20Sopenharmony_ci	grep -q "my_direct_func: waking up" trace
268c2ecf20Sopenharmony_ci}
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_cistop_direct() {
298c2ecf20Sopenharmony_ci	rmmod ftrace-direct
308c2ecf20Sopenharmony_ci}
318c2ecf20Sopenharmony_ci
328c2ecf20Sopenharmony_cienable_probe() {
338c2ecf20Sopenharmony_ci	echo > trace
348c2ecf20Sopenharmony_ci	echo 1 > events/kprobes/kwake/enable
358c2ecf20Sopenharmony_ci	sleep 1
368c2ecf20Sopenharmony_ci	grep -q "kwake:" trace
378c2ecf20Sopenharmony_ci}
388c2ecf20Sopenharmony_ci
398c2ecf20Sopenharmony_cidisable_probe() {
408c2ecf20Sopenharmony_ci	echo 0 > events/kprobes/kwake/enable
418c2ecf20Sopenharmony_ci}
428c2ecf20Sopenharmony_ci
438c2ecf20Sopenharmony_citest_kprobes() {
448c2ecf20Sopenharmony_ci	# probe -> direct -> no direct > no probe
458c2ecf20Sopenharmony_ci	enable_probe
468c2ecf20Sopenharmony_ci	start_direct
478c2ecf20Sopenharmony_ci	stop_direct
488c2ecf20Sopenharmony_ci	disable_probe
498c2ecf20Sopenharmony_ci
508c2ecf20Sopenharmony_ci	# probe -> direct -> no probe > no direct
518c2ecf20Sopenharmony_ci	enable_probe
528c2ecf20Sopenharmony_ci	start_direct
538c2ecf20Sopenharmony_ci	disable_probe
548c2ecf20Sopenharmony_ci	stop_direct
558c2ecf20Sopenharmony_ci
568c2ecf20Sopenharmony_ci	# direct -> probe -> no probe > no direct
578c2ecf20Sopenharmony_ci	start_direct
588c2ecf20Sopenharmony_ci	enable_probe
598c2ecf20Sopenharmony_ci	disable_probe
608c2ecf20Sopenharmony_ci	stop_direct
618c2ecf20Sopenharmony_ci
628c2ecf20Sopenharmony_ci	# direct -> probe -> no direct > no noprobe
638c2ecf20Sopenharmony_ci	start_direct
648c2ecf20Sopenharmony_ci	enable_probe
658c2ecf20Sopenharmony_ci	stop_direct
668c2ecf20Sopenharmony_ci	disable_probe
678c2ecf20Sopenharmony_ci}
688c2ecf20Sopenharmony_ci
698c2ecf20Sopenharmony_citest_kprobes
708c2ecf20Sopenharmony_ci
718c2ecf20Sopenharmony_ci# Now do this with a second registered direct function
728c2ecf20Sopenharmony_ciecho "Running with another ftrace direct function"
738c2ecf20Sopenharmony_ci
748c2ecf20Sopenharmony_cimodprobe ftrace-direct-too
758c2ecf20Sopenharmony_ci
768c2ecf20Sopenharmony_citest_kprobes
778c2ecf20Sopenharmony_ci
788c2ecf20Sopenharmony_cirmmod ftrace-direct-too
798c2ecf20Sopenharmony_ci
808c2ecf20Sopenharmony_ciecho > kprobe_events
81