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