aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/tools/testing/selftests/ftrace/test.d/filter/event-filter-function.tc
blob: 2de7c61d1ae308d06251bd9d072627e4120d37ce (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#!/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