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 > trace
14    echo 1 > events/kmem/kmem_cache_free/enable
15    echo 1 > tracing_on
16    ls > /dev/null
17    echo 0 > tracing_on
18    echo 0 > events/kmem/kmem_cache_free/enable
19}
20
21echo 0 > tracing_on
22echo 0 > events/enable
23
24echo "Get the most frequently calling function"
25sample_events
26
27target_func=`cut -d: -f3 trace | sed 's/call_site=\([^+]*\)+0x.*/\1/' | 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
35sample_events
36
37hitcnt=`grep kmem_cache_free trace| grep $target_func | wc -l`
38misscnt=`grep kmem_cache_free trace| grep -v $target_func | wc -l`
39
40if [ $hitcnt -eq 0 ]; then
41	exit_fail
42fi
43
44if [ $misscnt -gt 0 ]; then
45	exit_fail
46fi
47
48address=`grep " ${target_func}\$" /proc/kallsyms | cut -d' ' -f1`
49
50echo "Test event filter function address"
51echo "call_site.function == 0x$address" > events/kmem/kmem_cache_free/filter
52sample_events
53
54hitcnt=`grep kmem_cache_free trace| grep $target_func | wc -l`
55misscnt=`grep kmem_cache_free trace| grep -v $target_func | wc -l`
56
57if [ $hitcnt -eq 0 ]; then
58	exit_fail
59fi
60
61if [ $misscnt -gt 0 ]; then
62	exit_fail
63fi
64
65reset_events_filter
66
67exit 0
68