Commit 3e6c8f80 authored by Steven Rostedt's avatar Steven Rostedt Committed by Steven Rostedt (Google)
Browse files

tracing: Move ftrace_trace_stack() out of trace.c and into trace.h

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: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
parent 0e730bc0
Loading
Loading
Loading
Loading
+4 −41
Original line number Diff line number Diff line
@@ -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,7 +2938,7 @@ 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,
void __ftrace_trace_stack(struct trace_array *tr,
			  struct trace_buffer *buffer,
			  unsigned int trace_ctx,
			  int skip, struct pt_regs *regs)
@@ -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)
{
+31 −0
Original line number Diff line number Diff line
@@ -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.
 *