1#!/bin/sh
2# SPDX-License-Identifier: GPL-2.0
3# description: Generic dynamic event - add/remove fprobe events
4# requires: dynamic_events "f[:[<group>/][<event>]] <func-name>[%return] [<args>]":README
5
6echo 0 > events/enable
7echo > dynamic_events
8
9PLACE=$FUNCTION_FORK
10PLACE2="kmem_cache_free"
11PLACE3="schedule_timeout"
12
13# Some functions may have BPF programs attached, therefore
14# count already enabled_functions before tests start
15ocnt=`cat enabled_functions | wc -l`
16
17echo "f:myevent1 $PLACE" >> dynamic_events
18
19echo "f:myevent2 $PLACE%return" >> dynamic_events
20
21# add another event
22echo "f:myevent3 $PLACE2" >> dynamic_events
23
24grep -q myevent1 dynamic_events
25grep -q myevent2 dynamic_events
26grep -q myevent3 dynamic_events
27test -d events/fprobes/myevent1
28test -d events/fprobes/myevent2
29
30echo 1 > events/fprobes/myevent1/enable
31# Make sure the event is attached and is the only one
32grep -q $PLACE enabled_functions
33cnt=`cat enabled_functions | wc -l`
34if [ $cnt -ne $((ocnt + 1)) ]; then
35	exit_fail
36fi
37
38echo 1 > events/fprobes/myevent2/enable
39# It should till be the only attached function
40cnt=`cat enabled_functions | wc -l`
41if [ $cnt -ne $((ocnt + 1)) ]; then
42	exit_fail
43fi
44
45echo 1 > events/fprobes/myevent3/enable
46# If the function is different, the attached function should be increased
47grep -q $PLACE2 enabled_functions
48cnt=`cat enabled_functions | wc -l`
49if [ $cnt -ne $((ocnt + 2)) ]; then
50	exit_fail
51fi
52
53echo 0 > events/fprobes/myevent2/enable
54echo "-:myevent2" >> dynamic_events
55
56grep -q myevent1 dynamic_events
57! grep -q myevent2 dynamic_events
58
59# should still have 2 left
60cnt=`cat enabled_functions | wc -l`
61if [ $cnt -ne $((ocnt + 2)) ]; then
62	exit_fail
63fi
64
65echo 0 > events/fprobes/enable
66echo > dynamic_events
67
68# Should have none left
69cnt=`cat enabled_functions | wc -l`
70if [ $cnt -ne $ocnt ]; then
71	exit_fail
72fi
73
74echo "f:myevent4 $PLACE" >> dynamic_events
75
76echo 1 > events/fprobes/myevent4/enable
77# Should only have one enabled
78cnt=`cat enabled_functions | wc -l`
79if [ $cnt -ne $((ocnt + 1)) ]; then
80	exit_fail
81fi
82
83echo 0 > events/fprobes/enable
84echo > dynamic_events
85
86# Should have none left
87cnt=`cat enabled_functions | wc -l`
88if [ $cnt -ne $ocnt ]; then
89	exit_fail
90fi
91
92clear_trace
93