93 lines
2.1 KiB
Plaintext
93 lines
2.1 KiB
Plaintext
|
|
#!/bin/sh
|
||
|
|
# SPDX-License-Identifier: GPL-2.0
|
||
|
|
# description: Generic dynamic event - add/remove fprobe events
|
||
|
|
# requires: dynamic_events "f[:[<group>/][<event>]] <func-name>[%return] [<args>]":README
|
||
|
|
|
||
|
|
echo 0 > events/enable
|
||
|
|
echo > dynamic_events
|
||
|
|
|
||
|
|
PLACE=$FUNCTION_FORK
|
||
|
|
PLACE2="kmem_cache_free"
|
||
|
|
PLACE3="schedule_timeout"
|
||
|
|
|
||
|
|
# Some functions may have BPF programs attached, therefore
|
||
|
|
# count already enabled_functions before tests start
|
||
|
|
ocnt=`cat enabled_functions | wc -l`
|
||
|
|
|
||
|
|
echo "f:myevent1 $PLACE" >> dynamic_events
|
||
|
|
|
||
|
|
echo "f:myevent2 $PLACE%return" >> dynamic_events
|
||
|
|
|
||
|
|
# add another event
|
||
|
|
echo "f:myevent3 $PLACE2" >> dynamic_events
|
||
|
|
|
||
|
|
grep -q myevent1 dynamic_events
|
||
|
|
grep -q myevent2 dynamic_events
|
||
|
|
grep -q myevent3 dynamic_events
|
||
|
|
test -d events/fprobes/myevent1
|
||
|
|
test -d events/fprobes/myevent2
|
||
|
|
|
||
|
|
echo 1 > events/fprobes/myevent1/enable
|
||
|
|
# Make sure the event is attached and is the only one
|
||
|
|
grep -q $PLACE enabled_functions
|
||
|
|
cnt=`cat enabled_functions | wc -l`
|
||
|
|
if [ $cnt -ne $((ocnt + 1)) ]; then
|
||
|
|
exit_fail
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo 1 > events/fprobes/myevent2/enable
|
||
|
|
# It should till be the only attached function
|
||
|
|
cnt=`cat enabled_functions | wc -l`
|
||
|
|
if [ $cnt -ne $((ocnt + 1)) ]; then
|
||
|
|
exit_fail
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo 1 > events/fprobes/myevent3/enable
|
||
|
|
# If the function is different, the attached function should be increased
|
||
|
|
grep -q $PLACE2 enabled_functions
|
||
|
|
cnt=`cat enabled_functions | wc -l`
|
||
|
|
if [ $cnt -ne $((ocnt + 2)) ]; then
|
||
|
|
exit_fail
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo 0 > events/fprobes/myevent2/enable
|
||
|
|
echo "-:myevent2" >> dynamic_events
|
||
|
|
|
||
|
|
grep -q myevent1 dynamic_events
|
||
|
|
! grep -q myevent2 dynamic_events
|
||
|
|
|
||
|
|
# should still have 2 left
|
||
|
|
cnt=`cat enabled_functions | wc -l`
|
||
|
|
if [ $cnt -ne $((ocnt + 2)) ]; then
|
||
|
|
exit_fail
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo 0 > events/fprobes/enable
|
||
|
|
echo > dynamic_events
|
||
|
|
|
||
|
|
# Should have none left
|
||
|
|
cnt=`cat enabled_functions | wc -l`
|
||
|
|
if [ $cnt -ne $ocnt ]; then
|
||
|
|
exit_fail
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo "f:myevent4 $PLACE" >> dynamic_events
|
||
|
|
|
||
|
|
echo 1 > events/fprobes/myevent4/enable
|
||
|
|
# Should only have one enabled
|
||
|
|
cnt=`cat enabled_functions | wc -l`
|
||
|
|
if [ $cnt -ne $((ocnt + 1)) ]; then
|
||
|
|
exit_fail
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo 0 > events/fprobes/enable
|
||
|
|
echo > dynamic_events
|
||
|
|
|
||
|
|
# Should have none left
|
||
|
|
cnt=`cat enabled_functions | wc -l`
|
||
|
|
if [ $cnt -ne $ocnt ]; then
|
||
|
|
exit_fail
|
||
|
|
fi
|
||
|
|
|
||
|
|
clear_trace
|