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 23echo "Get the most frequently calling function" 24echo > trace 25sample_events 26 27target_func=`cat trace | grep -o 'call_site=\([^+]*\)' | sed 's/call_site=//' | sort | uniq -c | sort | tail -n 1 | sed 's/^[ 0-9]*//'` 28if [ -z "$target_func" ]; then 29 exit_fail 30fi 31echo > trace 32 33echo "Test event filter function name" 34echo "call_site.function == $target_func" > events/kmem/kmem_cache_free/filter 35 36sample_events 37max_retry=10 38while [ `grep kmem_cache_free trace| wc -l` -eq 0 ]; do 39sample_events 40max_retry=$((max_retry - 1)) 41if [ $max_retry -eq 0 ]; then 42 exit_fail 43fi 44done 45 46hitcnt=`grep kmem_cache_free trace| grep $target_func | wc -l` 47misscnt=`grep kmem_cache_free trace| grep -v $target_func | wc -l` 48 49if [ $hitcnt -eq 0 ]; then 50 exit_fail 51fi 52 53if [ $misscnt -gt 0 ]; then 54 exit_fail 55fi 56 57address=`grep " ${target_func}\$" /proc/kallsyms | cut -d' ' -f1` 58 59echo "Test event filter function address" 60echo "call_site.function == 0x$address" > events/kmem/kmem_cache_free/filter 61echo > trace 62sample_events 63max_retry=10 64while [ `grep kmem_cache_free trace| wc -l` -eq 0 ]; do 65sample_events 66max_retry=$((max_retry - 1)) 67if [ $max_retry -eq 0 ]; then 68 exit_fail 69fi 70done 71 72hitcnt=`grep kmem_cache_free trace| grep $target_func | wc -l` 73misscnt=`grep kmem_cache_free trace| grep -v $target_func | wc -l` 74 75if [ $hitcnt -eq 0 ]; then 76 exit_fail 77fi 78 79if [ $misscnt -gt 0 ]; then 80 exit_fail 81fi 82 83reset_events_filter 84 85exit 0 86