Skip to content

Commit dc6bf4d

Browse files
rostedtshuahkh
authored andcommitted
selftests/ftrace: Use $FUNCTION_FORK to reference kernel fork function
Commit cad6967 ("fork: introduce kernel_clone()") replaced "_do_fork()" with "kernel_clone()". The ftrace selftests reference the fork function in several of the tests. The rename will make the tests break, but if those names are changed in the tests, they would then break on older kernels. The same set of tests should pass older kernels if they have previously passed. Obviously, a new test may not work on older kernels if the test was added due to a bug or a new feature. The setup of ftracetest will now create a $FUNCTION_FORK bash variable that will contain "_do_fork" for older kernels and "kernel_clone" for newer ones. It figures out the proper name by examining /proc/kallsyms. Note, available_filter_functions could also be used, but because some tests should be able to pass without function tracing enabled, it could not be used. Fixes: eea1128 ("tracing: switch to kernel_clone()") Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org> Acked-by: Masami Hiramatsu <mhiramat@kernel.org> Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
1 parent 3650b22 commit dc6bf4d

19 files changed

Lines changed: 44 additions & 37 deletions

tools/testing/selftests/ftrace/test.d/dynevent/add_remove_kprobe.tc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
echo 0 > events/enable
77
echo > dynamic_events
88

9-
PLACE=kernel_clone
9+
PLACE=$FUNCTION_FORK
1010

1111
echo "p:myevent1 $PLACE" >> dynamic_events
1212
echo "r:myevent2 $PLACE" >> dynamic_events

tools/testing/selftests/ftrace/test.d/dynevent/clear_select_events.tc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
echo 0 > events/enable
77
echo > dynamic_events
88

9-
PLACE=kernel_clone
9+
PLACE=$FUNCTION_FORK
1010

1111
setup_events() {
1212
echo "p:myevent1 $PLACE" >> dynamic_events

tools/testing/selftests/ftrace/test.d/dynevent/generic_clear_event.tc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
echo 0 > events/enable
77
echo > dynamic_events
88

9-
PLACE=kernel_clone
9+
PLACE=$FUNCTION_FORK
1010

1111
setup_events() {
1212
echo "p:myevent1 $PLACE" >> dynamic_events

tools/testing/selftests/ftrace/test.d/ftrace/func-filter-notrace-pid.tc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ do_test() {
3939
disable_tracing
4040

4141
echo do_execve* > set_ftrace_filter
42-
echo *do_fork >> set_ftrace_filter
42+
echo $FUNCTION_FORK >> set_ftrace_filter
4343

4444
echo $PID > set_ftrace_notrace_pid
4545
echo function > current_tracer

tools/testing/selftests/ftrace/test.d/ftrace/func-filter-pid.tc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ do_test() {
3939
disable_tracing
4040

4141
echo do_execve* > set_ftrace_filter
42-
echo *do_fork >> set_ftrace_filter
42+
echo $FUNCTION_FORK >> set_ftrace_filter
4343

4444
echo $PID > set_ftrace_pid
4545
echo function > current_tracer

tools/testing/selftests/ftrace/test.d/ftrace/func-filter-stacktrace.tc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
# requires: set_ftrace_filter
55
# flags: instance
66

7-
echo kernel_clone:stacktrace >> set_ftrace_filter
7+
echo $FUNCTION_FORK:stacktrace >> set_ftrace_filter
88

9-
grep -q "kernel_clone:stacktrace:unlimited" set_ftrace_filter
9+
grep -q "$FUNCTION_FORK:stacktrace:unlimited" set_ftrace_filter
1010

1111
(echo "forked"; sleep 1)
1212

tools/testing/selftests/ftrace/test.d/functions

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,13 @@ yield() {
133133
ping $LOCALHOST -c 1 || sleep .001 || usleep 1 || sleep 1
134134
}
135135

136+
# The fork function in the kernel was renamed from "_do_fork" to
137+
# "kernel_fork". As older tests should still work with older kernels
138+
# as well as newer kernels, check which version of fork is used on this
139+
# kernel so that the tests can use the fork function for the running kernel.
140+
FUNCTION_FORK=`(if grep '\bkernel_clone\b' /proc/kallsyms > /dev/null; then
141+
echo kernel_clone; else echo '_do_fork'; fi)`
142+
136143
# Since probe event command may include backslash, explicitly use printf "%s"
137144
# to NOT interpret it.
138145
ftrace_errlog_check() { # err-prefix command-with-error-pos-by-^ command-file

tools/testing/selftests/ftrace/test.d/kprobe/add_and_remove.tc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# description: Kprobe dynamic event - adding and removing
44
# requires: kprobe_events
55

6-
echo p:myevent kernel_clone > kprobe_events
6+
echo p:myevent $FUNCTION_FORK > kprobe_events
77
grep myevent kprobe_events
88
test -d events/kprobes/myevent
99
echo > kprobe_events

tools/testing/selftests/ftrace/test.d/kprobe/busy_check.tc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# description: Kprobe dynamic event - busy event check
44
# requires: kprobe_events
55

6-
echo p:myevent kernel_clone > kprobe_events
6+
echo p:myevent $FUNCTION_FORK > kprobe_events
77
test -d events/kprobes/myevent
88
echo 1 > events/kprobes/myevent/enable
99
echo > kprobe_events && exit_fail # this must fail

tools/testing/selftests/ftrace/test.d/kprobe/kprobe_args.tc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
# description: Kprobe dynamic event with arguments
44
# requires: kprobe_events
55

6-
echo 'p:testprobe kernel_clone $stack $stack0 +0($stack)' > kprobe_events
6+
echo "p:testprobe $FUNCTION_FORK \$stack \$stack0 +0(\$stack)" > kprobe_events
77
grep testprobe kprobe_events | grep -q 'arg1=\$stack arg2=\$stack0 arg3=+0(\$stack)'
88
test -d events/kprobes/testprobe
99

1010
echo 1 > events/kprobes/testprobe/enable
1111
( echo "forked")
12-
grep testprobe trace | grep 'kernel_clone' | \
12+
grep testprobe trace | grep "$FUNCTION_FORK" | \
1313
grep -q 'arg1=0x[[:xdigit:]]* arg2=0x[[:xdigit:]]* arg3=0x[[:xdigit:]]*$'
1414

1515
echo 0 > events/kprobes/testprobe/enable

0 commit comments

Comments
 (0)