1#!/bin/sh 2# SPDX-License-Identifier: GPL-2.0 3# description: ftrace - test for function event triggers 4# flags: instance 5# 6# Ftrace allows to add triggers to functions, such as enabling or disabling 7# tracing, enabling or disabling trace events, or recording a stack trace 8# within the ring buffer. 9# 10# This test is designed to test event triggers 11# 12 13# The triggers are set within the set_ftrace_filter file 14if [ ! -f set_ftrace_filter ]; then 15 echo "set_ftrace_filter not found? Is dynamic ftrace not set?" 16 exit_unsupported 17fi 18 19do_reset() { 20 reset_ftrace_filter 21 reset_tracer 22 disable_events 23 clear_trace 24 enable_tracing 25} 26 27fail() { # mesg 28 do_reset 29 echo $1 30 exit_fail 31} 32 33SLEEP_TIME=".1" 34 35do_reset 36 37echo "Testing function probes with events:" 38 39EVENT="sched:sched_switch" 40EVENT_ENABLE="events/sched/sched_switch/enable" 41 42cnt_trace() { 43 grep -v '^#' trace | wc -l 44} 45 46test_event_enabled() { 47 val=$1 48 49 e=`cat $EVENT_ENABLE` 50 if [ "$e" != $val ]; then 51 fail "Expected $val but found $e" 52 fi 53} 54 55run_enable_disable() { 56 enable=$1 # enable 57 Enable=$2 # Enable 58 check_disable=$3 # 0 59 check_enable_star=$4 # 1* 60 check_disable_star=$5 # 0* 61 62 cnt=`cnt_trace` 63 if [ $cnt -ne 0 ]; then 64 fail "Found junk in trace file" 65 fi 66 67 echo "$Enable event all the time" 68 69 echo $check_disable > $EVENT_ENABLE 70 sleep $SLEEP_TIME 71 72 test_event_enabled $check_disable 73 74 echo "schedule:${enable}_event:$EVENT" > set_ftrace_filter 75 if [ -d ../../instances ]; then # Check instances 76 cur=`cat set_ftrace_filter` 77 top=`cat ../../set_ftrace_filter` 78 if [ "$cur" = "$top" ]; then 79 echo "This kernel is too old to support per instance filter" 80 reset_ftrace_filter 81 exit_unsupported 82 fi 83 fi 84 85 echo " make sure it works 5 times" 86 87 for i in `seq 5`; do 88 sleep $SLEEP_TIME 89 echo " test $i" 90 test_event_enabled $check_enable_star 91 92 echo $check_disable > $EVENT_ENABLE 93 done 94 sleep $SLEEP_TIME 95 echo " make sure it's still works" 96 test_event_enabled $check_enable_star 97 98 reset_ftrace_filter 99 100 echo " make sure it only works 3 times" 101 102 echo $check_disable > $EVENT_ENABLE 103 sleep $SLEEP_TIME 104 105 echo "schedule:${enable}_event:$EVENT:3" > set_ftrace_filter 106 107 for i in `seq 3`; do 108 sleep $SLEEP_TIME 109 echo " test $i" 110 test_event_enabled $check_enable_star 111 112 echo $check_disable > $EVENT_ENABLE 113 done 114 115 sleep $SLEEP_TIME 116 echo " make sure it stop working" 117 test_event_enabled $check_disable_star 118 119 do_reset 120} 121 122run_enable_disable enable Enable 0 "1*" "0*" 123run_enable_disable disable Disable 1 "0*" "1*" 124