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
19# Make sure the event is attached and is the only one
20grep -q $PLACE enabled_functions
21cnt=`cat enabled_functions | wc -l`
22if [ $cnt -ne $((ocnt + 1)) ]; then
23	exit_fail
24fi
25
26echo "f:myevent2 $PLACE%return" >> dynamic_events
27
28# It should till be the only attached function
29cnt=`cat enabled_functions | wc -l`
30if [ $cnt -ne $((ocnt + 1)) ]; then
31	exit_fail
32fi
33
34# add another event
35echo "f:myevent3 $PLACE2" >> dynamic_events
36
37grep -q $PLACE2 enabled_functions
38cnt=`cat enabled_functions | wc -l`
39if [ $cnt -ne $((ocnt + 2)) ]; then
40	exit_fail
41fi
42
43grep -q myevent1 dynamic_events
44grep -q myevent2 dynamic_events
45grep -q myevent3 dynamic_events
46test -d events/fprobes/myevent1
47test -d events/fprobes/myevent2
48
49echo "-:myevent2" >> dynamic_events
50
51grep -q myevent1 dynamic_events
52! grep -q myevent2 dynamic_events
53
54# should still have 2 left
55cnt=`cat enabled_functions | wc -l`
56if [ $cnt -ne $((ocnt + 2)) ]; then
57	exit_fail
58fi
59
60echo > dynamic_events
61
62# Should have none left
63cnt=`cat enabled_functions | wc -l`
64if [ $cnt -ne $ocnt ]; then
65	exit_fail
66fi
67
68echo "f:myevent4 $PLACE" >> dynamic_events
69
70# Should only have one enabled
71cnt=`cat enabled_functions | wc -l`
72if [ $cnt -ne $((ocnt + 1)) ]; then
73	exit_fail
74fi
75
76echo > dynamic_events
77
78# Should have none left
79cnt=`cat enabled_functions | wc -l`
80if [ $cnt -ne $ocnt ]; then
81	exit_fail
82fi
83
84clear_trace
85