From: "Steven Rostedt (VMware)" rostedt@goodmis.org
Add a test to test event probes, by creating a synthetic event across sys_enter_openat and sys_exit_openat that passes the filename pointer from the enter of the system call to the exit, and then add an event probe to the synthetic event to make sure that the file name is seen.
Link: https://lkml.kernel.org/r/20210819041842.884828019@goodmis.org
Cc: Shuah Khan shuah@kernel.org Cc: Shuah Khan skhan@linuxfoundation.org Cc: linux-kselftest@vger.kernel.org Signed-off-by: Steven Rostedt (VMware) rostedt@goodmis.org --- .../test.d/dynevent/add_remove_eprobe.tc | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 tools/testing/selftests/ftrace/test.d/dynevent/add_remove_eprobe.tc
diff --git a/tools/testing/selftests/ftrace/test.d/dynevent/add_remove_eprobe.tc b/tools/testing/selftests/ftrace/test.d/dynevent/add_remove_eprobe.tc new file mode 100644 index 000000000000..7b242f29b916 --- /dev/null +++ b/tools/testing/selftests/ftrace/test.d/dynevent/add_remove_eprobe.tc @@ -0,0 +1,53 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 +# description: Generic dynamic event - add/remove eprobe events +# requires: dynamic_events "e[:[<group>/]<event>] <attached-group>.<attached-event> [<args>]":README + +echo 0 > events/enable + +clear_dynamic_events + +SYSTEM="syscalls" +START="sys_enter_openat" +END="sys_exit_openat" +FIELD="filename" +SYNTH="synth_open" +EPROBE="eprobe_open" + +echo "$SYNTH u64 filename; s64 ret;" > synthetic_events +echo "hist:keys=common_pid:__arg__1=$FIELD" > events/$SYSTEM/$START/trigger +echo "hist:keys=common_pid:filename=$__arg__1,ret=ret:onmatch($SYSTEM.$START).trace($SYNTH,$filename,$ret)" > events/$SYSTEM/$END/trigger + +echo "e:$EPROBE synthetic/$SYNTH file=+0($filename):ustring ret=$ret:s64" >> dynamic_events + +grep -q "$SYNTH" dynamic_events +grep -q "$EPROBE" dynamic_events +test -d events/synthetic/$SYNTH +test -d events/eprobes/$EPROBE + +echo 1 > events/eprobes/$EPROBE/enable +ls +echo 0 > events/eprobes/$EPROBE/enable + +content=`grep '^ *ls-' trace | grep 'file='` +nocontent=`grep '^ *ls-' trace | grep 'file=' | grep -v -e '"/' -e '"."'` || true + +if [ -z "$content" ]; then + exit_fail +fi + +if [ ! -z "$nocontent" ]; then + exit_fail +fi + +echo "-:$EPROBE" >> dynamic_events +echo '!'"hist:keys=common_pid:filename=$__arg__1,ret=ret:onmatch($SYSTEM.$START).trace($SYNTH,$filename,$ret)" > events/$SYSTEM/$END/trigger +echo '!'"hist:keys=common_pid:__arg__1=$FIELD" > events/$SYSTEM/$START/trigger +echo '!'"$SYNTH u64 filename; s64 ret;" >> synthetic_events + +! grep -q "$SYNTH" dynamic_events +! grep -q "$EPROBE" dynamic_events +! test -d events/synthetic/$SYNTH +! test -d events/eprobes/$EPROBE + +clear_trace
On Thu, 19 Aug 2021 11:26:08 -0400 Steven Rostedt rostedt@goodmis.org wrote:
From: "Steven Rostedt (VMware)" rostedt@goodmis.org
Add a test to test event probes, by creating a synthetic event across sys_enter_openat and sys_exit_openat that passes the filename pointer from the enter of the system call to the exit, and then add an event probe to the synthetic event to make sure that the file name is seen.
Link: https://lkml.kernel.org/r/20210819041842.884828019@goodmis.org
Cc: Shuah Khan shuah@kernel.org Cc: Shuah Khan skhan@linuxfoundation.org Cc: linux-kselftest@vger.kernel.org Signed-off-by: Steven Rostedt (VMware) rostedt@goodmis.org
.../test.d/dynevent/add_remove_eprobe.tc | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 tools/testing/selftests/ftrace/test.d/dynevent/add_remove_eprobe.tc
diff --git a/tools/testing/selftests/ftrace/test.d/dynevent/add_remove_eprobe.tc b/tools/testing/selftests/ftrace/test.d/dynevent/add_remove_eprobe.tc new file mode 100644 index 000000000000..7b242f29b916 --- /dev/null +++ b/tools/testing/selftests/ftrace/test.d/dynevent/add_remove_eprobe.tc @@ -0,0 +1,53 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 +# description: Generic dynamic event - add/remove eprobe events +# requires: dynamic_events "e[:[<group>/]<event>] <attached-group>.<attached-event> [<args>]":README
+echo 0 > events/enable
+clear_dynamic_events
+SYSTEM="syscalls" +START="sys_enter_openat" +END="sys_exit_openat" +FIELD="filename" +SYNTH="synth_open" +EPROBE="eprobe_open"
+echo "$SYNTH u64 filename; s64 ret;" > synthetic_events +echo "hist:keys=common_pid:__arg__1=$FIELD" > events/$SYSTEM/$START/trigger +echo "hist:keys=common_pid:filename=$__arg__1,ret=ret:onmatch($SYSTEM.$START).trace($SYNTH,$filename,$ret)" > events/$SYSTEM/$END/trigger
Hmm, can you make this more simple one without synthetic events? Since synthetic event depends on CONFIG_SYNTH_EVENTS, you need to add "synth_events" to 'requires' tag. However, this means that this testcase doesn't run when CONFIG_SYNTH_EVENTS=n but CONFIG_*PROBE_EVENTS=y.
Thank you,
+echo "e:$EPROBE synthetic/$SYNTH file=+0($filename):ustring ret=$ret:s64" >> dynamic_events
+grep -q "$SYNTH" dynamic_events +grep -q "$EPROBE" dynamic_events +test -d events/synthetic/$SYNTH +test -d events/eprobes/$EPROBE
+echo 1 > events/eprobes/$EPROBE/enable +ls +echo 0 > events/eprobes/$EPROBE/enable
+content=`grep '^ *ls-' trace | grep 'file='` +nocontent=`grep '^ *ls-' trace | grep 'file=' | grep -v -e '"/' -e '"."'` || true
+if [ -z "$content" ]; then
- exit_fail
+fi
+if [ ! -z "$nocontent" ]; then
- exit_fail
+fi
+echo "-:$EPROBE" >> dynamic_events +echo '!'"hist:keys=common_pid:filename=$__arg__1,ret=ret:onmatch($SYSTEM.$START).trace($SYNTH,$filename,$ret)" > events/$SYSTEM/$END/trigger +echo '!'"hist:keys=common_pid:__arg__1=$FIELD" > events/$SYSTEM/$START/trigger +echo '!'"$SYNTH u64 filename; s64 ret;" >> synthetic_events
+! grep -q "$SYNTH" dynamic_events +! grep -q "$EPROBE" dynamic_events +! test -d events/synthetic/$SYNTH +! test -d events/eprobes/$EPROBE
+clear_trace
2.30.2
On Fri, 20 Aug 2021 09:46:39 +0900 Masami Hiramatsu mhiramat@kernel.org wrote:
+echo "$SYNTH u64 filename; s64 ret;" > synthetic_events +echo "hist:keys=common_pid:__arg__1=$FIELD" > events/$SYSTEM/$START/trigger +echo "hist:keys=common_pid:filename=$__arg__1,ret=ret:onmatch($SYSTEM.$START).trace($SYNTH,$filename,$ret)" > events/$SYSTEM/$END/trigger
Hmm, can you make this more simple one without synthetic events? Since synthetic event depends on CONFIG_SYNTH_EVENTS, you need to add "synth_events" to 'requires' tag. However, this means that this testcase doesn't run when CONFIG_SYNTH_EVENTS=n but CONFIG_*PROBE_EVENTS=y.
Sure. I just used this because it was one of the main purposes I was using it for. I may keep this as a test, but will rename it as something else, and make a more simple one for just testing the event probe add and removal.
-- Steve
linux-kselftest-mirror@lists.linaro.org