File Index
Files and directories
Sign in
FILE

event-filter-function.tc

File preview with syntax highlighting.

linux-6.19.14/tools/testing/selftests/ftrace/test.d/filter/event-filter-function.tc PLAIN TEXT
  1#!/bin/sh
  2# SPDX-License-Identifier: GPL-2.0
  3# description: event filter function - test event filtering on functions
  4# requires: set_event events/kmem/kmem_cache_free/filter
  5# flags: instance
  6
  7fail() { #msg
  8    echo $1
  9    exit_fail
 10}
 11
 12sample_events() {
 13    echo 1 > events/kmem/kmem_cache_free/enable
 14    echo 1 > tracing_on
 15    ls > /dev/null
 16    echo 0 > tracing_on
 17    echo 0 > events/kmem/kmem_cache_free/enable
 18}
 19
 20echo 0 > tracing_on
 21echo 0 > events/enable
 22
 23# Clear functions caused by page cache; run sample_events twice
 24sample_events
 25sample_events
 26
 27echo "Get the most frequently calling function"
 28echo > trace
 29sample_events
 30
 31target_func=`cat trace | grep -o 'call_site=\([^+]*\)' | sed 's/call_site=//' | sort | uniq -c | sort | tail -n 1 | sed 's/^[ 0-9]*//'`
 32if [ -z "$target_func" ]; then
 33    exit_fail
 34fi
 35echo > trace
 36
 37echo "Test event filter function name"
 38echo "call_site.function == $target_func" > events/kmem/kmem_cache_free/filter
 39
 40sample_events
 41max_retry=10
 42while [ `grep kmem_cache_free trace| wc -l` -eq 0 ]; do
 43sample_events
 44max_retry=$((max_retry - 1))
 45if [ $max_retry -eq 0 ]; then
 46	exit_fail
 47fi
 48done
 49
 50hitcnt=`grep kmem_cache_free trace| grep $target_func | wc -l`
 51misscnt=`grep kmem_cache_free trace| grep -v $target_func | wc -l`
 52
 53if [ $hitcnt -eq 0 ]; then
 54	exit_fail
 55fi
 56
 57if [ $misscnt -gt 0 ]; then
 58	exit_fail
 59fi
 60
 61address=`grep " ${target_func}\$" /proc/kallsyms | cut -d' ' -f1`
 62
 63echo "Test event filter function address"
 64echo "call_site.function == 0x$address" > events/kmem/kmem_cache_free/filter
 65echo > trace
 66sample_events
 67max_retry=10
 68while [ `grep kmem_cache_free trace| wc -l` -eq 0 ]; do
 69sample_events
 70max_retry=$((max_retry - 1))
 71if [ $max_retry -eq 0 ]; then
 72	exit_fail
 73fi
 74done
 75
 76hitcnt=`grep kmem_cache_free trace| grep $target_func | wc -l`
 77misscnt=`grep kmem_cache_free trace| grep -v $target_func | wc -l`
 78
 79if [ $hitcnt -eq 0 ]; then
 80	exit_fail
 81fi
 82
 83if [ $misscnt -gt 0 ]; then
 84	exit_fail
 85fi
 86
 87# Check strings too
 88if [ -f events/syscalls/sys_enter_openat/filter ]; then
 89	DIRNAME=`basename $TMPDIR`
 90	echo "filename.ustring ~ \"*$DIRNAME*\"" > events/syscalls/sys_enter_openat/filter
 91	echo 1 > events/syscalls/sys_enter_openat/enable
 92	echo 1 > tracing_on
 93	ls /bin/sh
 94	nocnt=`grep openat trace | wc -l`
 95	ls $TMPDIR
 96	echo 0 > tracing_on
 97	hitcnt=`grep openat trace | wc -l`;
 98	echo 0 > events/syscalls/sys_enter_openat/enable
 99	if [ $nocnt -gt 0 ]; then
100		exit_fail
101	fi
102	if [ $hitcnt -eq 0 ]; then
103		exit_fail
104	fi
105fi
106
107reset_events_filter
108
109exit 0
~/ Read-only file preview.