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