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;
 }

Reply via email to