| #!/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. |
| grep -q $PLACE enabled_functions |
| cnt=`cat enabled_functions | wc -l` |
| if [ $cnt -eq $ocnt ]; then |
| exit_fail |
| fi |
| |
| echo 1 > events/fprobes/myevent2/enable |
| cnt2=`cat enabled_functions | wc -l` |
| |
| 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 -eq $cnt2 ]; then |
| exit_fail |
| fi |
| |
| echo 0 > events/fprobes/myevent2/enable |
| echo "-:myevent2" >> dynamic_events |
| |
| grep -q myevent1 dynamic_events |
| ! grep -q myevent2 dynamic_events |
| |
| 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 |