• James Morse's avatar
    KVM: arm64: Handle RAS SErrors from EL2 on guest exit · 0067df41
    James Morse authored
    We expect to have firmware-first handling of RAS SErrors, with errors
    notified via an APEI method. For systems without firmware-first, add
    some minimal handling to KVM.
    
    There are two ways KVM can take an SError due to a guest, either may be a
    RAS error: we exit the guest due to an SError routed to EL2 by HCR_EL2.AMO,
    or we take an SError from EL2 when we unmask PSTATE.A from __guest_exit.
    
    The current SError from EL2 code unmasks SError and tries to fence any
    pending SError into a single instruction window. It then leaves SError
    unmasked.
    
    With the v8.2 RAS Extensions we may take an SError for a 'corrected'
    error, but KVM is only able to handle SError from EL2 if they occur
    during this single instruction window...
    
    The RAS Extensions give us a new instruction to synchronise and
    consume SErrors. The RAS Extensions document (ARM DDI0587),
    '2.4.1 ESB and Unrecoverable errors' describes ESB as synchronising
    SError interrupts generated by 'instructions, translation table walks,
    hardware updates to the translation tables, and instruction fetches on
    the same PE'. This makes ESB equivalent to KVMs existing
    'dsb, mrs-daifclr, isb' sequence.
    
    Use the alternatives to synchronise and consume any SError using ESB
    instead of unmasking and taking the SError. Set ARM_EXIT_WITH_SERROR_BIT
    in the exit_code so that we can restart the vcpu if it turns out this
    SError has no impact on the vcpu.
    Reviewed-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: default avatarJames Morse <james.morse@arm.com>
    Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    0067df41
kvm_emulate.h 8.85 KB