• Mark Rutland's avatar
    efi/runtime-wrappers: Add {__,}efi_call_virt() templates · f51c35f2
    Mark Rutland authored
    Currently each architecture must implement two macros, efi_call_virt() and
    __efi_call_virt(), which only differ by the presence or absence of a
    return type. Otherwise, the logic surrounding the call is identical.
    
    As each architecture must define the entire body of each, we can't place
    any generic manipulation (e.g. irq flag validation) in the middle.
    
    This patch adds template implementations of these macros. With these,
    arch code can implement three template macros, avoiding reptition for
    the void/non-void return cases:
    
    * arch_efi_call_virt_setup()
    
      Sets up the environment for the call (e.g. switching page tables,
      allowing kernel-mode use of floating point, if required).
    
    * arch_efi_call_virt()
    
      Performs the call. The last expression in the macro must be the call
      itself, allowing the logic to be shared by the void and non-void
      cases.
    
    * arch_efi_call_virt_teardown()
    
      Restores the usual kernel environment once the call has returned.
    
    While the savings from repition are minimal, we additionally gain the
    ability to add common code around the call with the call environment set
    up. This can be used to detect common firmware issues (e.g. bad irq mask
    management).
    Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
    Signed-off-by: default avatarMatt Fleming <matt@codeblueprint.co.uk>
    Reviewed-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Leif Lindholm <leif.lindholm@linaro.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Russell King <linux@arm.linux.org.uk>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Will Deacon <will.deacon@arm.com>
    Cc: linux-efi@vger.kernel.org
    Link: http://lkml.kernel.org/r/1461614832-17633-32-git-send-email-matt@codeblueprint.co.ukSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    f51c35f2
runtime-wrappers.c 8.88 KB