• James Morse's avatar
    arm64: KVM/mm: Move SEA handling behind a single 'claim' interface · d44f1b8d
    James Morse authored
    To split up APEIs in_nmi() path, the caller needs to always be
    in_nmi(). Add a helper to do the work and claim the notification.
    
    When KVM or the arch code takes an exception that might be a RAS
    notification, it asks the APEI firmware-first code whether it wants
    to claim the exception. A future kernel-first mechanism may be queried
    afterwards, and claim the notification, otherwise we fall through
    to the existing default behaviour.
    
    The NOTIFY_SEA code was merged before considering multiple, possibly
    interacting, NMI-like notifications and the need to consider kernel
    first in the future. Make the 'claiming' behaviour explicit.
    
    Restructuring the APEI code to allow multiple NMI-like notifications
    means any notification that might interrupt interrupts-masked
    code must always be wrapped in nmi_enter()/nmi_exit(). This will
    allow APEI to use in_nmi() to use the right fixmap entries.
    
    Mask SError over this window to prevent an asynchronous RAS error
    arriving and tripping 'nmi_enter()'s BUG_ON(in_nmi()).
    Signed-off-by: default avatarJames Morse <james.morse@arm.com>
    Acked-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    Tested-by: default avatarTyler Baicar <tbaicar@codeaurora.org>
    Acked-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    d44f1b8d
daifflags.h 1.52 KB