#!/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 > trace 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" sample_events target_func=`cut -d: -f3 trace | sed 's/call_site=\([^+]*\)+0x.*/\1/' | 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 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 sample_events 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