Skip to content
  • louis.wang's avatar
    8252ca87
    ARM: 9066/1: ftrace: pause/unpause function graph tracer in cpu_suspend() · 8252ca87
    louis.wang authored
    
    
    Enabling function_graph tracer on ARM causes kernel panic, because the
    function graph tracer updates the "return address" of a function in order
    to insert a trace callback on function exit, it saves the function's
    original return address in a return trace stack, but cpu_suspend() may not
    return through the normal return path.
    
    cpu_suspend() will resume directly via the cpu_resume path, but the return
    trace stack has been set-up by the subfunctions of cpu_suspend(), which
    makes the "return address" inconsistent with cpu_suspend().
    
    This patch refers to Commit de818bd4
    ("arm64: kernel: pause/unpause function graph tracer in cpu_suspend()"),
    
    fixes the issue by pausing/resuming the function graph tracer on the thread
    executing cpu_suspend(), so that the function graph tracer state is kept
    consistent across functions that enter power down states and never return
    by effectively disabling graph tracer while they are executing.
    
    Signed-off-by: default avatarlouis.wang <liang26812@gmail.com>
    Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
    8252ca87
    ARM: 9066/1: ftrace: pause/unpause function graph tracer in cpu_suspend()
    louis.wang authored
    
    
    Enabling function_graph tracer on ARM causes kernel panic, because the
    function graph tracer updates the "return address" of a function in order
    to insert a trace callback on function exit, it saves the function's
    original return address in a return trace stack, but cpu_suspend() may not
    return through the normal return path.
    
    cpu_suspend() will resume directly via the cpu_resume path, but the return
    trace stack has been set-up by the subfunctions of cpu_suspend(), which
    makes the "return address" inconsistent with cpu_suspend().
    
    This patch refers to Commit de818bd4
    ("arm64: kernel: pause/unpause function graph tracer in cpu_suspend()"),
    
    fixes the issue by pausing/resuming the function graph tracer on the thread
    executing cpu_suspend(), so that the function graph tracer state is kept
    consistent across functions that enter power down states and never return
    by effectively disabling graph tracer while they are executing.
    
    Signed-off-by: default avatarlouis.wang <liang26812@gmail.com>
    Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
Loading