• Benjamin Herrenschmidt's avatar
    powerpc: Fix page fault with lockdep regression · 08f1ec8a
    Benjamin Herrenschmidt authored
    commit a546498f
    introduced a regression on 32-bit when irq tracing
    is enabled by exposing an old bug in our irq tracing
    code for exception entry.
    
    The code would save and restore some GPRs around the
    calls to the C lockdep code, however, it tries to be
    too smart for its own good and restores some of the
    GPRs from the exception frame (as saved there on
    exception entry).
    
    However, for page faults, we do replace those GPRs with
    arguments to do_page_fault before we call transfer_to_handler
    and so restoring from the exception frame is plain wrong in
    this case.
    
    This was fine as long as we didn't touch the interrupt state
    when taking page fault, but when I started doing it, it would
    trigger the lockdep calls and the bug.
    
    This fixes it by cleaning up that code a bit. It did create
    a small stack frame for the sake of backtraces, so let's
    make it a bit bigger and use it to save and restore the
    stuff we care about.
    Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
    08f1ec8a
entry_32.S 33.9 KB