1#!/bin/sh 2# SPDX-License-Identifier: GPL-2.0 3# description: ftrace - function glob filters 4 5# Make sure that function glob matching filter works. 6 7if ! grep -q function available_tracers; then 8 echo "no function tracer configured" 9 exit_unsupported 10fi 11 12disable_tracing 13clear_trace 14 15ftrace_filter_check() { # glob grep 16 echo "$1" > set_ftrace_filter 17 cut -f1 -d" " set_ftrace_filter > $TMPDIR/actual 18 cut -f1 -d" " available_filter_functions | grep "$2" > $TMPDIR/expected 19 DIFF=`diff $TMPDIR/actual $TMPDIR/expected` 20 test -z "$DIFF" 21} 22 23# filter by *, front match 24ftrace_filter_check '*schedule' '^.*schedule$' 25 26# filter by *, middle match 27ftrace_filter_check '*schedule*' '^.*schedule.*$' 28 29# filter by *, end match 30ftrace_filter_check 'schedule*' '^schedule.*$' 31 32# filter by *mid*end 33ftrace_filter_check '*aw*lock' '.*aw.*lock$' 34 35# filter by start*mid* 36ftrace_filter_check 'mutex*try*' '^mutex.*try.*' 37 38# Advanced full-glob matching feature is recently supported. 39# Skip the tests if we are sure the kernel does not support it. 40if grep -q 'accepts: .* glob-matching-pattern' README ; then 41 42# filter by *, both side match 43ftrace_filter_check 'sch*ule' '^sch.*ule$' 44 45# filter by char class. 46ftrace_filter_check '[Ss]y[Ss]_*' '^[Ss]y[Ss]_.*$' 47 48# filter by ?, schedule is always good 49if ! echo "sch?dule" > set_ftrace_filter; then 50 # test for powerpc 64 51 if ! echo ".sch?dule" > set_ftrace_filter; then 52 fail "can not enable schedule filter" 53 fi 54 cat set_ftrace_filter | grep '^.schedule$' 55else 56 cat set_ftrace_filter | grep '^schedule$' 57fi 58 59fi 60 61echo > set_ftrace_filter 62enable_tracing 63