Re: [BUG] tracing: dynamic ftrace selftest detected failures
From: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Date: 2024-08-23 00:04:17
Also in:
lkml, llvm
On Wed, 21 Aug 2024 11:50:00 -0400 Steven Rostedt [off-list ref] wrote:
On Wed, 21 Aug 2024 16:42:07 +0100 Mark Rutland [off-list ref] wrote:quoted
FWIW, that was in samples/ftrace/ftrace-ops.c, where tracee_relevant() and tracee_irrelevant() have the barrier(): | /* | * Marked as noinline to ensure that an out-of-line traceable copy is | * generated by the compiler. | * | * The barrier() ensures the compiler won't elide calls by determining there | * are no side-effects. | */ | static noinline void tracee_relevant(void) | { | barrier(); | } ... so we already have precedent for that in tracing code.If adding a barrier() fixes things, then I'm 100% for adding them. Masami, does this fix it?
Interesting, this fixes the issue! And it is great to find how to avoid the LTO removes function like this. Tested-by: Masami Hiramatsu (Google) <mhiramat@kernel.org> Thank you,
quoted hunk ↗ jump to hunk
-- Stevediff --git a/kernel/trace/trace_selftest_dynamic.c b/kernel/trace/trace_selftest_dynamic.c index c364cf777e1a..a112433d78ce 100644 --- a/kernel/trace/trace_selftest_dynamic.c +++ b/kernel/trace/trace_selftest_dynamic.c@@ -4,12 +4,20 @@ noinline __noclone int DYN_FTRACE_TEST_NAME(void) { - /* used to call mcount */ + /* + * Used to test function tracing. Make sure the compiler doesn't + * remove it. + */ + barrier(); return 0; } noinline __noclone int DYN_FTRACE_TEST_NAME2(void) { - /* used to call mcount */ + /* + * Used to test function tracing. Make sure the compiler doesn't + * remove it. + */ + barrier(); return 0; }
-- Masami Hiramatsu (Google) [off-list ref]