• Matt Fleming's avatar
    sh: Mark __switch_to() as __notrace_funcgraph · 7816fecd
    Matt Fleming authored
    Annotate __switch_to() so that the function graph tracer does not try to
    trace it. Use __notrace_funcgraph, as opposed to notrace, so that other
    tracers can continue to trace __switch_to().
    
    The reason that we don't want to trace __switch_to() with the function
    graph tracer is because of how the return address stack in task_struct
    is implemented. When we enter __switch_to we store the real return
    address on prev's ret_stack. When we return from __switch_to() we've
    patched the return address on the kernel stack to be
    return_to_handler. Calling return_to_handler we do,
    
           -> ftrace_return_to_handler()
           	  -> ftrace_pop_return_ftrace()
    
    Which tries to pop the real return address from current->ret_stack. The
    problem being that we stored the return address on prev->ret_stack, but
    current now points to next, and next->ret_stack doesn't contain the
    correct return address (and is possibly even empty).
    Signed-off-by: default avatarMatt Fleming <matt@console-pimps.org>
    Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
    7816fecd
process_32.c 9.69 KB