mirror of
https://github.com/torvalds/linux.git
synced 2026-06-10 07:32:29 +02:00
tracing: Use stack of calling function for stack tracer
commit 87889501d0 upstream.
Use the stack of stack_trace_call() instead of check_stack() as
the test pointer for max stack size. It makes it a bit cleaner
and a little more accurate.
Adding stable, as a later fix depends on this patch.
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
a393520aa6
commit
893238186e
|
|
@ -40,20 +40,21 @@ static DEFINE_MUTEX(stack_sysctl_mutex);
|
|||
int stack_tracer_enabled;
|
||||
static int last_stack_tracer_enabled;
|
||||
|
||||
static inline void check_stack(void)
|
||||
static inline void
|
||||
check_stack(unsigned long *stack)
|
||||
{
|
||||
unsigned long this_size, flags;
|
||||
unsigned long *p, *top, *start;
|
||||
int i;
|
||||
|
||||
this_size = ((unsigned long)&this_size) & (THREAD_SIZE-1);
|
||||
this_size = ((unsigned long)stack) & (THREAD_SIZE-1);
|
||||
this_size = THREAD_SIZE - this_size;
|
||||
|
||||
if (this_size <= max_stack_size)
|
||||
return;
|
||||
|
||||
/* we do not handle interrupt stacks yet */
|
||||
if (!object_is_on_stack(&this_size))
|
||||
if (!object_is_on_stack(stack))
|
||||
return;
|
||||
|
||||
local_irq_save(flags);
|
||||
|
|
@ -74,7 +75,7 @@ static inline void check_stack(void)
|
|||
* Now find where in the stack these are.
|
||||
*/
|
||||
i = 0;
|
||||
start = &this_size;
|
||||
start = stack;
|
||||
top = (unsigned long *)
|
||||
(((unsigned long)start & ~(THREAD_SIZE-1)) + THREAD_SIZE);
|
||||
|
||||
|
|
@ -113,6 +114,7 @@ static inline void check_stack(void)
|
|||
static void
|
||||
stack_trace_call(unsigned long ip, unsigned long parent_ip)
|
||||
{
|
||||
unsigned long stack;
|
||||
int cpu;
|
||||
|
||||
if (unlikely(!ftrace_enabled || stack_trace_disabled))
|
||||
|
|
@ -125,7 +127,7 @@ stack_trace_call(unsigned long ip, unsigned long parent_ip)
|
|||
if (per_cpu(trace_active, cpu)++ != 0)
|
||||
goto out;
|
||||
|
||||
check_stack();
|
||||
check_stack(&stack);
|
||||
|
||||
out:
|
||||
per_cpu(trace_active, cpu)--;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user