• A
    arm64: efi: Avoid workqueue to check whether EFI runtime is live · 8a9a1a18
    Ard Biesheuvel 提交于
    Comparing current_work() against efi_rts_work.work is sufficient to
    decide whether current is currently running EFI runtime services code at
    any level in its call stack.
    
    However, there are other potential users of the EFI runtime stack, such
    as the ACPI subsystem, which may invoke efi_call_virt_pointer()
    directly, and so any sync exceptions occurring in firmware during those
    calls are currently misidentified.
    
    So instead, let's check whether the stashed value of the thread stack
    pointer points into current's thread stack. This can only be the case if
    current was interrupted while running EFI runtime code. Note that this
    implies that we should clear the stashed value after switching back, to
    avoid false positives.
    Reviewed-by: NMark Rutland <mark.rutland@arm.com>
    Signed-off-by: NArd Biesheuvel <ardb@kernel.org>
    8a9a1a18
efi.h 5.1 KB