• Ard Biesheuvel's avatar
    ARM: entry: fix unwinder problems caused by IRQ stacks · 7a8ca84a
    Ard Biesheuvel authored
    The IRQ stacks series made some changes to the unwinder, to permit
    unwinding across different stacks. This is needed because otherwise, the
    call stack would terminate at the point where the stack switch between
    the task stack and the IRQ stack occurs, which would defeat any
    diagnostics that rely on timer interrupts, such as RCU stall detection.
    
    Unfortunately, getting the unwind annotations correct turns out to be
    difficult, given that this now involves a frame pointer which needs to
    point into the right location in the task stack when unwinding from the
    IRQ stack. Getting this wrong for an exception handling routine results
    in the stack pointer to be unwound from the wrong location, causing any
    subsequent unwind attempts to cause all kinds of issues, as reported by
    Naresh here [0].
    
    So let's simplify this, by deferring the stack switch to
    call_with_stack(), which already has the correct unwind annotations, and
    removing all the complicated handling of the stack frame from the IRQ
    exception entrypoint itself.
    
    [0] https://lore.kernel.org/all/CA+G9fYtpy8VgK+ag6OsA9TDrwi5YGU4hu7GM8xwpO7v6LrCD4Q@mail.gmail.com/Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
    Signed-off-by: default avatarRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
    7a8ca84a
entry-armv.S 31.9 KB