selftests/ftrace: Choose target function for filter test from samples
[sfrench/cifs-2.6.git] / tools / testing / selftests / ftrace / test.d / filter / event-filter-function.tc
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
7 fail() { #msg
8     echo $1
9     exit_fail
10 }
11
12 sample_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
21 echo 0 > tracing_on
22 echo 0 > events/enable
23
24 echo "Get the most frequently calling function"
25 sample_events
26
27 target_func=`cut -d: -f3 trace | sed 's/call_site=\([^+]*\)+0x.*/\1/' | sort | uniq -c | sort | tail -n 1 | sed 's/^[ 0-9]*//'`
28 if [ -z "$target_func" ]; then
29     exit_fail
30 fi
31 echo > trace
32
33 echo "Test event filter function name"
34 echo "call_site.function == $target_func" > events/kmem/kmem_cache_free/filter
35 sample_events
36
37 hitcnt=`grep kmem_cache_free trace| grep $target_func | wc -l`
38 misscnt=`grep kmem_cache_free trace| grep -v $target_func | wc -l`
39
40 if [ $hitcnt -eq 0 ]; then
41         exit_fail
42 fi
43
44 if [ $misscnt -gt 0 ]; then
45         exit_fail
46 fi
47
48 address=`grep " ${target_func}\$" /proc/kallsyms | cut -d' ' -f1`
49
50 echo "Test event filter function address"
51 echo "call_site.function == 0x$address" > events/kmem/kmem_cache_free/filter
52 sample_events
53
54 hitcnt=`grep kmem_cache_free trace| grep $target_func | wc -l`
55 misscnt=`grep kmem_cache_free trace| grep -v $target_func | wc -l`
56
57 if [ $hitcnt -eq 0 ]; then
58         exit_fail
59 fi
60
61 if [ $misscnt -gt 0 ]; then
62         exit_fail
63 fi
64
65 reset_events_filter
66
67 exit 0