• Nicholas Piggin's avatar
    powerpc/64: use interrupt restart table to speed up return from interrupt · 13799748
    Nicholas Piggin authored
    Use the restart table facility to return from interrupt or system calls
    without disabling MSR[EE] or MSR[RI].
    
    Interrupt return asm is put into the low soft-masked region, to prevent
    interrupts being processed here, although they are still taken as masked
    interrupts which causes SRRs to be clobbered, and a pending soft-masked
    interrupt to require replaying.
    
    The return code uses restart table regions to redirct to a fixup handler
    rather than continue with the exit, if such an interrupt happens. In
    this case the interrupt return is redirected to a fixup handler which
    reloads r1 for the interrupt stack and reloads registers and sets state
    up to replay the soft-masked interrupt and try the exit again.
    
    Some types of security exit fallback flushes and barriers are currently
    unable to cope with reentrant interrupts, e.g., because they store some
    state in the scratch SPR which would be clobbered even by masked
    interrupts. For now the interrupts-enabled exits are disabled when these
    flushes are used.
    Signed-off-by: default avatarNicholas Piggin <npiggin@gmail.com>
    [mpe: Guard unused exit_must_hard_disable() as reported by lkp]
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20210617155116.2167984-13-npiggin@gmail.com
    13799748
interrupt.c 15.8 KB