From: Steven Rostedt <[email protected]>

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.

Signed-off-by: Steven Rostedt (Google) <[email protected]>
---
 kernel/trace/trace.c | 45 ++++----------------------------------------
 kernel/trace/trace.h | 31 ++++++++++++++++++++++++++++++
 2 files changed, 35 insertions(+), 41 deletions(-)

diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 55cd0c774886..a515b5241391 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -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)
 {
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
index c2beabe96952..605ee23f3262 100644
--- a/kernel/trace/trace.h
+++ b/kernel/trace/trace.h
@@ -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.
  *
-- 
2.51.0



Reply via email to