• Nicholas Piggin's avatar
    KVM: PPC: Book3S HV P9: Implement the rest of the P9 path in C · 89d35b23
    Nicholas Piggin authored
    Almost all logic is moved to C, by introducing a new in_guest mode for
    the P9 path that branches very early in the KVM interrupt handler to P9
    exit code.
    
    The main P9 entry and exit assembly is now only about 160 lines of low
    level stack setup and register save/restore, plus a bad-interrupt
    handler.
    
    There are two motivations for this, the first is just make the code more
    maintainable being in C. The second is to reduce the amount of code
    running in a special KVM mode, "realmode". In quotes because with radix
    it is no longer necessarily real-mode in the MMU, but it still has to be
    treated specially because it may be in real-mode, and has various
    important registers like PID, DEC, TB, etc set to guest. This is hostile
    to the rest of Linux and can't use arbitrary kernel functionality or be
    instrumented well.
    
    This initial patch is a reasonably faithful conversion of the asm code,
    but it does lack any loop to return quickly back into the guest without
    switching out of realmode in the case of unimportant or easily handled
    interrupts. As explained in previous changes, handling HV interrupts
    very quickly in this low level realmode is not so important for P9
    performance, and are important to avoid for security, observability,
    debugability reasons.
    Signed-off-by: default avatarNicholas Piggin <npiggin@gmail.com>
    Reviewed-by: default avatarAlexey Kardashevskiy <aik@ozlabs.ru>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20210528090752.3542186-15-npiggin@gmail.com
    89d35b23
book3s_hv.c 154 KB