Skip to content
  • James Morse's avatar
    KVM: arm64: Consume pending SError as early as possible · 0e5b9c08
    James Morse authored
    
    
    On systems with v8.2 we switch the 'vaxorcism' of guest SError with an
    alternative sequence that uses the ESB-instruction, then reads DISR_EL1.
    This saves the unmasking and remasking of asynchronous exceptions.
    
    We do this after we've saved the guest registers and restored the
    host's. Any SError that becomes pending due to this will be accounted
    to the guest, when it actually occurred during host-execution.
    
    Move the ESB-instruction as early as possible. Any guest SError
    will become pending due to this ESB-instruction and then consumed to
    DISR_EL1 before the host touches anything.
    
    This lets us account for host/guest SError precisely on the guest
    exit exception boundary.
    
    Because the ESB-instruction now lands in the preamble section of
    the vectors, we need to add it to the unpatched indirect vectors
    too, and to any sequence that may be patched in over the top.
    
    The ESB-instruction always lives in the head of the vectors,
    to be before any memory write. Whereas the register-store always
    lives in the tail.
    
    Signed-off-by: default avatarJames Morse <james.morse@arm.com>
    Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    0e5b9c08