Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

selftests/ftrace: Add a testcase for fprobe events on module

Add a testcase for fprobe events on module, which unloads a kernel
module on which fprobe events are probing and ensure the ftrace
hash map is cleared correctly.

Link: https://lore.kernel.org/all/177669369564.132053.623527664540176496.stgit@mhiramat.tok.corp.google.com/

Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>

+87
+87
tools/testing/selftests/ftrace/test.d/dynevent/add_remove_fprobe_module.tc
··· 1 + #!/bin/sh 2 + # SPDX-License-Identifier: GPL-2.0 3 + # description: Generic dynamic event - add/remove fprobe events on module 4 + # requires: dynamic_events "f[:[<group>/][<event>]] <func-name>[%return] [<args>]":README enabled_functions 5 + 6 + rmmod trace-events-sample ||: 7 + if ! modprobe trace-events-sample ; then 8 + echo "No trace-events sample module - please make CONFIG_SAMPLE_TRACE_EVENTS=m" 9 + exit_unresolved; 10 + fi 11 + trap "lsmod | grep -q trace_events_sample && rmmod trace-events-sample" EXIT 12 + 13 + echo 0 > events/enable 14 + echo > dynamic_events 15 + 16 + FUNC1='foo_bar*' 17 + FUNC2='vfs_read' 18 + 19 + :;: "Add an event on the test module" ;: 20 + echo "f:test1 $FUNC1" >> dynamic_events 21 + echo 1 > events/fprobes/test1/enable 22 + 23 + :;: "Ensure it is enabled" ;: 24 + funcs=`cat enabled_functions | wc -l` 25 + test $funcs -ne 0 26 + 27 + :;: "Check the enabled_functions is cleared on unloading" ;: 28 + rmmod trace-events-sample 29 + funcs=`cat enabled_functions | wc -l` 30 + test $funcs -eq 0 31 + 32 + :;: "Check it is kept clean" ;: 33 + modprobe trace-events-sample 34 + echo 1 > events/fprobes/test1/enable || echo "OK" 35 + funcs=`cat enabled_functions | wc -l` 36 + test $funcs -eq 0 37 + 38 + :;: "Add another event not on the test module" ;: 39 + echo "f:test2 $FUNC2" >> dynamic_events 40 + echo 1 > events/fprobes/test2/enable 41 + 42 + :;: "Ensure it is enabled" ;: 43 + ofuncs=`cat enabled_functions | wc -l` 44 + test $ofuncs -ne 0 45 + 46 + :;: "Disable and remove the first event" 47 + echo 0 > events/fprobes/test1/enable 48 + echo "-:fprobes/test1" >> dynamic_events 49 + funcs=`cat enabled_functions | wc -l` 50 + test $ofuncs -eq $funcs 51 + 52 + :;: "Disable and remove other events" ;: 53 + echo 0 > events/fprobes/enable 54 + echo > dynamic_events 55 + funcs=`cat enabled_functions | wc -l` 56 + test $funcs -eq 0 57 + 58 + rmmod trace-events-sample 59 + 60 + :;: "Add events on kernel and test module" ;: 61 + modprobe trace-events-sample 62 + echo "f:test1 $FUNC1" >> dynamic_events 63 + echo 1 > events/fprobes/test1/enable 64 + echo "f:test2 $FUNC2" >> dynamic_events 65 + echo 1 > events/fprobes/test2/enable 66 + ofuncs=`cat enabled_functions | wc -l` 67 + test $ofuncs -ne 0 68 + 69 + :;: "Unload module (ftrace entry should be removed)" ;: 70 + rmmod trace-events-sample 71 + funcs=`cat enabled_functions | wc -l` 72 + test $funcs -ne 0 73 + test $ofuncs -ne $funcs 74 + 75 + :;: "Disable and remove core-kernel fprobe event" ;: 76 + echo 0 > events/fprobes/test2/enable 77 + echo "-:fprobes/test2" >> dynamic_events 78 + 79 + :;: "Ensure ftrace is disabled." ;: 80 + funcs=`cat enabled_functions | wc -l` 81 + test $funcs -eq 0 82 + 83 + echo 0 > events/fprobes/enable 84 + echo > dynamic_events 85 + 86 + trap "" EXIT 87 + clear_trace