]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
tracing: Move ftrace_trace_stack() out of trace.c and into trace.h
authorSteven Rostedt <rostedt@goodmis.org>
Sun, 8 Feb 2026 03:24:21 +0000 (22:24 -0500)
committerSteven Rostedt (Google) <rostedt@goodmis.org>
Mon, 9 Feb 2026 02:01:12 +0000 (21:01 -0500)
The file trace.c has become a catchall for most things tracing. Start
making it smaller by breaking out various aspects into their own files.

Make ftrace_trace_stack() into a static inline that tests if stack tracing
is enabled and if so to call __ftrace_trace_stack() to do the stack trace.
This keeps the test inlined in the fast paths and only does the function
call if stack tracing is enabled.

Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Link: https://patch.msgid.link/20260208032449.974218132@kernel.org
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
kernel/trace/trace.c
kernel/trace/trace.h

index 55cd0c774886202802be667221bb2ae324f93dcc..a515b5241391eb2ec32a6239d9e0afcc3a1fc7b1 100644 (file)
@@ -1032,32 +1032,6 @@ static inline void trace_access_lock_init(void)
 
 #endif
 
-#ifdef CONFIG_STACKTRACE
-static void __ftrace_trace_stack(struct trace_array *tr,
-                                struct trace_buffer *buffer,
-                                unsigned int trace_ctx,
-                                int skip, struct pt_regs *regs);
-static inline void ftrace_trace_stack(struct trace_array *tr,
-                                     struct trace_buffer *buffer,
-                                     unsigned int trace_ctx,
-                                     int skip, struct pt_regs *regs);
-
-#else
-static inline void __ftrace_trace_stack(struct trace_array *tr,
-                                       struct trace_buffer *buffer,
-                                       unsigned int trace_ctx,
-                                       int skip, struct pt_regs *regs)
-{
-}
-static inline void ftrace_trace_stack(struct trace_array *tr,
-                                     struct trace_buffer *buffer,
-                                     unsigned long trace_ctx,
-                                     int skip, struct pt_regs *regs)
-{
-}
-
-#endif
-
 void tracer_tracing_on(struct trace_array *tr)
 {
        if (tr->array_buffer.buffer)
@@ -2964,10 +2938,10 @@ struct ftrace_stacks {
 static DEFINE_PER_CPU(struct ftrace_stacks, ftrace_stacks);
 static DEFINE_PER_CPU(int, ftrace_stack_reserve);
 
-static void __ftrace_trace_stack(struct trace_array *tr,
-                                struct trace_buffer *buffer,
-                                unsigned int trace_ctx,
-                                int skip, struct pt_regs *regs)
+void __ftrace_trace_stack(struct trace_array *tr,
+                         struct trace_buffer *buffer,
+                         unsigned int trace_ctx,
+                         int skip, struct pt_regs *regs)
 {
        struct ring_buffer_event *event;
        unsigned int size, nr_entries;
@@ -3050,17 +3024,6 @@ static void __ftrace_trace_stack(struct trace_array *tr,
        trace_clear_recursion(bit);
 }
 
-static inline void ftrace_trace_stack(struct trace_array *tr,
-                                     struct trace_buffer *buffer,
-                                     unsigned int trace_ctx,
-                                     int skip, struct pt_regs *regs)
-{
-       if (!(tr->trace_flags & TRACE_ITER(STACKTRACE)))
-               return;
-
-       __ftrace_trace_stack(tr, buffer, trace_ctx, skip, regs);
-}
-
 void __trace_stack(struct trace_array *tr, unsigned int trace_ctx,
                   int skip)
 {
index c2beabe9695206b02fb216c7cee150be9e1a9881..605ee23f3262193ed9a4df1c4206ddd6ce458fff 100644 (file)
@@ -2279,6 +2279,37 @@ static inline void sanitize_event_name(char *name)
                        *name = '_';
 }
 
+#ifdef CONFIG_STACKTRACE
+void __ftrace_trace_stack(struct trace_array *tr,
+                         struct trace_buffer *buffer,
+                         unsigned int trace_ctx,
+                         int skip, struct pt_regs *regs);
+
+static __always_inline void ftrace_trace_stack(struct trace_array *tr,
+                                              struct trace_buffer *buffer,
+                                              unsigned int trace_ctx,
+                                              int skip, struct pt_regs *regs)
+{
+       if (!(tr->trace_flags & TRACE_ITER(STACKTRACE)))
+               return;
+
+       __ftrace_trace_stack(tr, buffer, trace_ctx, skip, regs);
+}
+#else
+static inline void __ftrace_trace_stack(struct trace_array *tr,
+                                       struct trace_buffer *buffer,
+                                       unsigned int trace_ctx,
+                                       int skip, struct pt_regs *regs)
+{
+}
+static inline void ftrace_trace_stack(struct trace_array *tr,
+                                     struct trace_buffer *buffer,
+                                     unsigned long trace_ctx,
+                                     int skip, struct pt_regs *regs)
+{
+}
+#endif
+
 /*
  * This is a generic way to read and write a u64 value from a file in tracefs.
  *