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>
This commit is contained in:
committed by
Steven Rostedt (Google)
parent
b355247df1
commit
542079b4b1
@@ -0,0 +1,191 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# description: event tracing - enable/disable with module event
|
||||
# requires: set_event "Can enable module events via: :mod:":README
|
||||
# flags: instance
|
||||
|
||||
rmmod trace-events-sample ||:
|
||||
if ! modprobe trace-events-sample ; then
|
||||
echo "No trace-events sample module - please make CONFIG_SAMPLE_TRACE_EVENTS=m"
|
||||
exit_unresolved;
|
||||
fi
|
||||
trap "rmmod trace-events-sample" EXIT
|
||||
|
||||
# Set events for the module
|
||||
echo ":mod:trace-events-sample" > set_event
|
||||
|
||||
test_all_enabled() {
|
||||
|
||||
# Check if more than one is enabled
|
||||
grep -q sample-trace:foo_bar set_event
|
||||
grep -q sample-trace:foo_bar_with_cond set_event
|
||||
grep -q sample-trace:foo_bar_with_fn set_event
|
||||
|
||||
# All of them should be enabled. Check via the enable file
|
||||
val=`cat events/sample-trace/enable`
|
||||
if [ $val -ne 1 ]; then
|
||||
exit_fail
|
||||
fi
|
||||
}
|
||||
|
||||
clear_events() {
|
||||
echo > set_event
|
||||
val=`cat events/enable`
|
||||
if [ "$val" != "0" ]; then
|
||||
exit_fail
|
||||
fi
|
||||
count=`cat set_event | wc -l`
|
||||
if [ $count -ne 0 ]; then
|
||||
exit_fail
|
||||
fi
|
||||
}
|
||||
|
||||
test_all_enabled
|
||||
|
||||
echo clear all events
|
||||
echo 0 > events/enable
|
||||
|
||||
echo Confirm the events are disabled
|
||||
val=`cat events/sample-trace/enable`
|
||||
if [ $val -ne 0 ]; then
|
||||
exit_fail
|
||||
fi
|
||||
|
||||
echo And the set_event file is empty
|
||||
|
||||
cnt=`wc -l set_event`
|
||||
if [ $cnt -ne 0 ]; then
|
||||
exit_fail
|
||||
fi
|
||||
|
||||
echo now enable all events
|
||||
echo 1 > events/enable
|
||||
|
||||
echo Confirm the events are enabled again
|
||||
val=`cat events/sample-trace/enable`
|
||||
if [ $val -ne 1 ]; then
|
||||
exit_fail
|
||||
fi
|
||||
|
||||
echo disable just the module events
|
||||
echo '!:mod:trace-events-sample' >> set_event
|
||||
|
||||
echo Should have mix of events enabled
|
||||
val=`cat events/enable`
|
||||
if [ "$val" != "X" ]; then
|
||||
exit_fail
|
||||
fi
|
||||
|
||||
echo Confirm the module events are disabled
|
||||
val=`cat events/sample-trace/enable`
|
||||
if [ $val -ne 0 ]; then
|
||||
exit_fail
|
||||
fi
|
||||
|
||||
echo 0 > events/enable
|
||||
|
||||
echo now enable the system events
|
||||
echo 'sample-trace:mod:trace-events-sample' > set_event
|
||||
|
||||
test_all_enabled
|
||||
|
||||
echo clear all events
|
||||
echo 0 > events/enable
|
||||
|
||||
echo Confirm the events are disabled
|
||||
val=`cat events/sample-trace/enable`
|
||||
if [ $val -ne 0 ]; then
|
||||
exit_fail
|
||||
fi
|
||||
|
||||
echo Test enabling foo_bar only
|
||||
echo 'foo_bar:mod:trace-events-sample' > set_event
|
||||
|
||||
grep -q sample-trace:foo_bar set_event
|
||||
|
||||
echo make sure nothing is found besides foo_bar
|
||||
if grep -q -v sample-trace:foo_bar set_event ; then
|
||||
exit_fail
|
||||
fi
|
||||
|
||||
echo Append another using the system and event name
|
||||
echo 'sample-trace:foo_bar_with_cond:mod:trace-events-sample' >> set_event
|
||||
|
||||
grep -q sample-trace:foo_bar set_event
|
||||
grep -q sample-trace:foo_bar_with_cond set_event
|
||||
|
||||
count=`cat set_event | wc -l`
|
||||
|
||||
if [ $count -ne 2 ]; then
|
||||
exit_fail
|
||||
fi
|
||||
|
||||
clear_events
|
||||
|
||||
rmmod trace-events-sample
|
||||
|
||||
echo ':mod:trace-events-sample' > set_event
|
||||
|
||||
echo make sure that the module shows up, and '-' is converted to '_'
|
||||
grep -q '\*:\*:mod:trace_events_sample' set_event
|
||||
|
||||
modprobe trace-events-sample
|
||||
|
||||
test_all_enabled
|
||||
|
||||
clear_events
|
||||
|
||||
rmmod trace-events-sample
|
||||
|
||||
echo Enable just the system events
|
||||
echo 'sample-trace:mod:trace-events-sample' > set_event
|
||||
grep -q 'sample-trace:mod:trace_events_sample' set_event
|
||||
|
||||
modprobe trace-events-sample
|
||||
|
||||
test_all_enabled
|
||||
|
||||
clear_events
|
||||
|
||||
rmmod trace-events-sample
|
||||
|
||||
echo Enable event with just event name
|
||||
echo 'foo_bar:mod:trace-events-sample' > set_event
|
||||
grep -q 'foo_bar:mod:trace_events_sample' set_event
|
||||
|
||||
echo Enable another event with both system and event name
|
||||
echo 'sample-trace:foo_bar_with_cond:mod:trace-events-sample' >> set_event
|
||||
grep -q 'sample-trace:foo_bar_with_cond:mod:trace_events_sample' set_event
|
||||
echo Make sure the other event was still there
|
||||
grep -q 'foo_bar:mod:trace_events_sample' set_event
|
||||
|
||||
modprobe trace-events-sample
|
||||
|
||||
echo There should be no :mod: cached events
|
||||
if grep -q ':mod:' set_event; then
|
||||
exit_fail
|
||||
fi
|
||||
|
||||
echo two events should be enabled
|
||||
count=`cat set_event | wc -l`
|
||||
if [ $count -ne 2 ]; then
|
||||
exit_fail
|
||||
fi
|
||||
|
||||
echo only two events should be enabled
|
||||
val=`cat events/sample-trace/enable`
|
||||
if [ "$val" != "X" ]; then
|
||||
exit_fail
|
||||
fi
|
||||
|
||||
val=`cat events/sample-trace/foo_bar/enable`
|
||||
if [ "$val" != "1" ]; then
|
||||
exit_fail
|
||||
fi
|
||||
|
||||
val=`cat events/sample-trace/foo_bar_with_cond/enable`
|
||||
if [ "$val" != "1" ]; then
|
||||
exit_fail
|
||||
fi
|
||||
|
||||
clear_trace
|
||||
Reference in New Issue
Block a user