lkml.org 
[lkml]   [2013]   [May]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 061/118] tracing: Use stack of calling function for stack tracer
    Date
    3.5.7.12 -stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: "Steven Rostedt (Red Hat)" <rostedt@goodmis.org>

    commit 87889501d0adfae10e3b0f0e6f2d7536eed9ae84 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>
    [ luis: adjust context ]
    Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
    ---
    kernel/trace/trace_stack.c | 12 +++++++-----
    1 file changed, 7 insertions(+), 5 deletions(-)

    diff --git a/kernel/trace/trace_stack.c b/kernel/trace/trace_stack.c
    index aa4270a..6ee97e5 100644
    --- a/kernel/trace/trace_stack.c
    +++ b/kernel/trace/trace_stack.c
    @@ -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)--;
    --
    1.8.1.2


    \
     
     \ /
      Last update: 2013-05-07 16:45    [W:4.236 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site