#!/bin/sh # SPDX-License-Identifier: GPL-2.0 # description: event filter function - test event filtering on functions # requires: set_event events/kmem/kmem_cache_free/filter # flags: instance fail() { #msg echo $1 exit_fail } sample_events() { echo 1 > events/kmem/kmem_cache_free/enable echo 1 > tracing_on ls > /dev/null echo 0 > tracing_on echo 0 > events/kmem/kmem_cache_free/enable } echo 0 > tracing_on echo 0 > events/enable echo "Get the most frequently calling function" echo > trace sample_events target_func=`cat trace | grep -o 'call_site=\([^+]*\)' | sed 's/call_site=//' | sort | uniq -c | sort | tail -n 1 | sed 's/^[ 0-9]*//'` if [ -z "$target_func" ]; then exit_fail fi echo > trace echo "Test event filter function name" echo "call_site.function == $target_func" > events/kmem/kmem_cache_free/filter sample_events max_retry=10 while [ `grep kmem_cache_free trace| wc -l` -eq 0 ]; do sample_events max_retry=$((max_retry - 1)) if [ $max_retry -eq 0 ]; then exit_fail fi done hitcnt=`grep kmem_cache_free trace| grep $target_func | wc -l` misscnt=`grep kmem_cache_free trace| grep -v $target_func | wc -l` if [ $hitcnt -eq 0 ]; then exit_fail fi if [ $misscnt -gt 0 ]; then exit_fail fi address=`grep " ${target_func}\$" /proc/kallsyms | cut -d' ' -f1` echo "Test event filter function address" echo "call_site.function == 0x$address" > events/kmem/kmem_cache_free/filter echo > trace sample_events max_retry=10 while [ `grep kmem_cache_free trace| wc -l` -eq 0 ]; do sample_events max_retry=$((max_retry - 1)) if [ $max_retry -eq 0 ]; then exit_fail fi done hitcnt=`grep kmem_cache_free trace| grep $target_func | wc -l` misscnt=`grep kmem_cache_free trace| grep -v $target_func | wc -l` if [ $hitcnt -eq 0 ]; then exit_fail fi if [ $misscnt -gt 0 ]; then exit_fail fi reset_events_filter exit 0