On Wed, 21 Aug 2024 16:42:07 +0100 Mark Rutland <mark.rutl...@arm.com> wrote:
> 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? -- Steve diff --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; }