-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
selftests/ftrace: Add test to test new set_ftrace_notrace_pid file
A new file was added to the tracing directory that will allow a user to place a PID into it and the task associated to that PID will not be traced by the function tracer. If the function-fork option is enabled, then neither will the children of that task be traced by the function tracer. Cc: linux-kselftest@vger.kernel.org Cc: Shuah Khan <skhan@linuxfoundation.org> Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
- Loading branch information
Steven Rostedt (VMware)
committed
Mar 27, 2020
1 parent
2768362
commit ed8839e
Showing
1 changed file
with
108 additions
and
0 deletions.
There are no files selected for viewing
108 changes: 108 additions & 0 deletions
108
tools/testing/selftests/ftrace/test.d/ftrace/func-filter-notrace-pid.tc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,108 @@ | ||
#!/bin/sh | ||
# SPDX-License-Identifier: GPL-2.0 | ||
# description: ftrace - function pid notrace filters | ||
# flags: instance | ||
|
||
# Make sure that function pid matching filter with notrace works. | ||
|
||
if ! grep -q function available_tracers; then | ||
echo "no function tracer configured" | ||
exit_unsupported | ||
fi | ||
|
||
if [ ! -f set_ftrace_notrace_pid ]; then | ||
echo "set_ftrace_notrace_pid not found? Is function tracer not set?" | ||
exit_unsupported | ||
fi | ||
|
||
if [ ! -f set_ftrace_filter ]; then | ||
echo "set_ftrace_filter not found? Is function tracer not set?" | ||
exit_unsupported | ||
fi | ||
|
||
do_function_fork=1 | ||
|
||
if [ ! -f options/function-fork ]; then | ||
do_function_fork=0 | ||
echo "no option for function-fork found. Option will not be tested." | ||
fi | ||
|
||
read PID _ < /proc/self/stat | ||
|
||
if [ $do_function_fork -eq 1 ]; then | ||
# default value of function-fork option | ||
orig_value=`grep function-fork trace_options` | ||
fi | ||
|
||
do_reset() { | ||
if [ $do_function_fork -eq 0 ]; then | ||
return | ||
fi | ||
|
||
echo > set_ftrace_notrace_pid | ||
echo $orig_value > trace_options | ||
} | ||
|
||
fail() { # msg | ||
do_reset | ||
echo $1 | ||
exit_fail | ||
} | ||
|
||
do_test() { | ||
disable_tracing | ||
|
||
echo do_execve* > set_ftrace_filter | ||
echo *do_fork >> set_ftrace_filter | ||
|
||
echo $PID > set_ftrace_notrace_pid | ||
echo function > current_tracer | ||
|
||
if [ $do_function_fork -eq 1 ]; then | ||
# don't allow children to be traced | ||
echo nofunction-fork > trace_options | ||
fi | ||
|
||
enable_tracing | ||
yield | ||
|
||
count_pid=`cat trace | grep -v ^# | grep $PID | wc -l` | ||
count_other=`cat trace | grep -v ^# | grep -v $PID | wc -l` | ||
|
||
# count_pid should be 0 | ||
if [ $count_pid -ne 0 -o $count_other -eq 0 ]; then | ||
fail "PID filtering not working? traced task = $count_pid; other tasks = $count_other " | ||
fi | ||
|
||
disable_tracing | ||
clear_trace | ||
|
||
if [ $do_function_fork -eq 0 ]; then | ||
return | ||
fi | ||
|
||
# allow children to be traced | ||
echo function-fork > trace_options | ||
|
||
# With pid in both set_ftrace_pid and set_ftrace_notrace_pid | ||
# there should not be any tasks traced. | ||
|
||
echo $PID > set_ftrace_pid | ||
|
||
enable_tracing | ||
yield | ||
|
||
count_pid=`cat trace | grep -v ^# | grep $PID | wc -l` | ||
count_other=`cat trace | grep -v ^# | grep -v $PID | wc -l` | ||
|
||
# both should be zero | ||
if [ $count_pid -ne 0 -o $count_other -ne 0 ]; then | ||
fail "PID filtering not following fork? traced task = $count_pid; other tasks = $count_other " | ||
fi | ||
} | ||
|
||
do_test | ||
|
||
do_reset | ||
|
||
exit 0 |