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

selftests/ftrace: Add test that tests event :mod: commands

Now that here's a :mod: command that can be sent into set_event, add a
test that tests its use. Both setting events for a loaded module, as well
as caching what events to set for a module that is not loaded yet.

Cc: Shuah Khan <shuah@kernel.org>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: linux-kselftest@vger.kernel.org
Link: https://lore.kernel.org/20250116143533.819228058@goodmis.org
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

+191
+191
tools/testing/selftests/ftrace/test.d/event/event-mod.tc
··· 1 + #!/bin/sh 2 + # SPDX-License-Identifier: GPL-2.0 3 + # description: event tracing - enable/disable with module event 4 + # requires: set_event "Can enable module events via: :mod:":README 5 + # flags: instance 6 + 7 + rmmod trace-events-sample ||: 8 + if ! modprobe trace-events-sample ; then 9 + echo "No trace-events sample module - please make CONFIG_SAMPLE_TRACE_EVENTS=m" 10 + exit_unresolved; 11 + fi 12 + trap "rmmod trace-events-sample" EXIT 13 + 14 + # Set events for the module 15 + echo ":mod:trace-events-sample" > set_event 16 + 17 + test_all_enabled() { 18 + 19 + # Check if more than one is enabled 20 + grep -q sample-trace:foo_bar set_event 21 + grep -q sample-trace:foo_bar_with_cond set_event 22 + grep -q sample-trace:foo_bar_with_fn set_event 23 + 24 + # All of them should be enabled. Check via the enable file 25 + val=`cat events/sample-trace/enable` 26 + if [ $val -ne 1 ]; then 27 + exit_fail 28 + fi 29 + } 30 + 31 + clear_events() { 32 + echo > set_event 33 + val=`cat events/enable` 34 + if [ "$val" != "0" ]; then 35 + exit_fail 36 + fi 37 + count=`cat set_event | wc -l` 38 + if [ $count -ne 0 ]; then 39 + exit_fail 40 + fi 41 + } 42 + 43 + test_all_enabled 44 + 45 + echo clear all events 46 + echo 0 > events/enable 47 + 48 + echo Confirm the events are disabled 49 + val=`cat events/sample-trace/enable` 50 + if [ $val -ne 0 ]; then 51 + exit_fail 52 + fi 53 + 54 + echo And the set_event file is empty 55 + 56 + cnt=`wc -l set_event` 57 + if [ $cnt -ne 0 ]; then 58 + exit_fail 59 + fi 60 + 61 + echo now enable all events 62 + echo 1 > events/enable 63 + 64 + echo Confirm the events are enabled again 65 + val=`cat events/sample-trace/enable` 66 + if [ $val -ne 1 ]; then 67 + exit_fail 68 + fi 69 + 70 + echo disable just the module events 71 + echo '!:mod:trace-events-sample' >> set_event 72 + 73 + echo Should have mix of events enabled 74 + val=`cat events/enable` 75 + if [ "$val" != "X" ]; then 76 + exit_fail 77 + fi 78 + 79 + echo Confirm the module events are disabled 80 + val=`cat events/sample-trace/enable` 81 + if [ $val -ne 0 ]; then 82 + exit_fail 83 + fi 84 + 85 + echo 0 > events/enable 86 + 87 + echo now enable the system events 88 + echo 'sample-trace:mod:trace-events-sample' > set_event 89 + 90 + test_all_enabled 91 + 92 + echo clear all events 93 + echo 0 > events/enable 94 + 95 + echo Confirm the events are disabled 96 + val=`cat events/sample-trace/enable` 97 + if [ $val -ne 0 ]; then 98 + exit_fail 99 + fi 100 + 101 + echo Test enabling foo_bar only 102 + echo 'foo_bar:mod:trace-events-sample' > set_event 103 + 104 + grep -q sample-trace:foo_bar set_event 105 + 106 + echo make sure nothing is found besides foo_bar 107 + if grep -q -v sample-trace:foo_bar set_event ; then 108 + exit_fail 109 + fi 110 + 111 + echo Append another using the system and event name 112 + echo 'sample-trace:foo_bar_with_cond:mod:trace-events-sample' >> set_event 113 + 114 + grep -q sample-trace:foo_bar set_event 115 + grep -q sample-trace:foo_bar_with_cond set_event 116 + 117 + count=`cat set_event | wc -l` 118 + 119 + if [ $count -ne 2 ]; then 120 + exit_fail 121 + fi 122 + 123 + clear_events 124 + 125 + rmmod trace-events-sample 126 + 127 + echo ':mod:trace-events-sample' > set_event 128 + 129 + echo make sure that the module shows up, and '-' is converted to '_' 130 + grep -q '\*:\*:mod:trace_events_sample' set_event 131 + 132 + modprobe trace-events-sample 133 + 134 + test_all_enabled 135 + 136 + clear_events 137 + 138 + rmmod trace-events-sample 139 + 140 + echo Enable just the system events 141 + echo 'sample-trace:mod:trace-events-sample' > set_event 142 + grep -q 'sample-trace:mod:trace_events_sample' set_event 143 + 144 + modprobe trace-events-sample 145 + 146 + test_all_enabled 147 + 148 + clear_events 149 + 150 + rmmod trace-events-sample 151 + 152 + echo Enable event with just event name 153 + echo 'foo_bar:mod:trace-events-sample' > set_event 154 + grep -q 'foo_bar:mod:trace_events_sample' set_event 155 + 156 + echo Enable another event with both system and event name 157 + echo 'sample-trace:foo_bar_with_cond:mod:trace-events-sample' >> set_event 158 + grep -q 'sample-trace:foo_bar_with_cond:mod:trace_events_sample' set_event 159 + echo Make sure the other event was still there 160 + grep -q 'foo_bar:mod:trace_events_sample' set_event 161 + 162 + modprobe trace-events-sample 163 + 164 + echo There should be no :mod: cached events 165 + if grep -q ':mod:' set_event; then 166 + exit_fail 167 + fi 168 + 169 + echo two events should be enabled 170 + count=`cat set_event | wc -l` 171 + if [ $count -ne 2 ]; then 172 + exit_fail 173 + fi 174 + 175 + echo only two events should be enabled 176 + val=`cat events/sample-trace/enable` 177 + if [ "$val" != "X" ]; then 178 + exit_fail 179 + fi 180 + 181 + val=`cat events/sample-trace/foo_bar/enable` 182 + if [ "$val" != "1" ]; then 183 + exit_fail 184 + fi 185 + 186 + val=`cat events/sample-trace/foo_bar_with_cond/enable` 187 + if [ "$val" != "1" ]; then 188 + exit_fail 189 + fi 190 + 191 + clear_trace