• Steven Rostedt's avatar
    ftrace: Use breakpoint method to update ftrace caller · 8a4d0a68
    Steven Rostedt authored
    On boot up and module load, it is fine to modify the code directly,
    without the use of breakpoints. This is because boot up modification
    is done before SMP is initialized, thus the modification is serial,
    and module load is done before the module executes.
    
    But after that we must use a SMP safe method to modify running code.
    Otherwise, if we are running the function tracer and update its
    function (by starting off the stack tracer, or perf tracing)
    the change of the function called by the ftrace trampoline is done
    directly. If this is being executed on another CPU, that CPU may
    take a GPF and crash the kernel.
    
    The breakpoint method is used to change the nops at all the functions, but
    the change of the ftrace callback handler itself was still using a
    direct modification. If tracing was enabled and the function callback
    was changed then another CPU could fault if it was currently calling
    the original callback. This modification must use the breakpoint method
    too.
    
    Note, the direct method is still used for boot up and module load.
    Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    8a4d0a68
ftrace.c 15.9 KB