efi: Simplify arch_efi_call_virt() macro
authorSudeep Holla <sudeep.holla@arm.com>
Tue, 28 Jun 2022 14:18:21 +0000 (15:18 +0100)
committerArd Biesheuvel <ardb@kernel.org>
Tue, 28 Jun 2022 18:13:09 +0000 (20:13 +0200)
Currently, the arch_efi_call_virt() assumes all users of it will have
defined a type 'efi_##f##_t' to make use of it.

Simplify the arch_efi_call_virt() macro by eliminating the explicit
need for efi_##f##_t type for every user of this macro.

Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
Acked-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
[ardb: apply Sudeep's ARM fix to i686, Loongarch and RISC-V too]
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
arch/arm/include/asm/efi.h
arch/arm64/include/asm/efi.h
arch/loongarch/include/asm/efi.h
arch/riscv/include/asm/efi.h
arch/x86/include/asm/efi.h
include/linux/efi.h

index 27218ea..3088ef7 100644 (file)
@@ -24,13 +24,6 @@ int efi_set_mapping_permissions(struct mm_struct *mm, efi_memory_desc_t *md);
 #define arch_efi_call_virt_setup()     efi_virtmap_load()
 #define arch_efi_call_virt_teardown()  efi_virtmap_unload()
 
-#define arch_efi_call_virt(p, f, args...)                              \
-({                                                                     \
-       efi_##f##_t *__f;                                               \
-       __f = p->f;                                                     \
-       __f(args);                                                      \
-})
-
 #define ARCH_EFI_IRQ_FLAGS_MASK \
        (PSR_J_BIT | PSR_E_BIT | PSR_A_BIT | PSR_I_BIT | PSR_F_BIT | \
         PSR_T_BIT | MODE_MASK)
index ad55079..439e2bc 100644 (file)
@@ -27,12 +27,9 @@ int efi_set_mapping_permissions(struct mm_struct *mm, efi_memory_desc_t *md);
        __efi_fpsimd_begin();                                           \
 })
 
+#undef arch_efi_call_virt
 #define arch_efi_call_virt(p, f, args...)                              \
-({                                                                     \
-       efi_##f##_t *__f;                                               \
-       __f = p->f;                                                     \
-       __efi_rt_asm_wrapper(__f, #f, args);                            \
-})
+       __efi_rt_asm_wrapper((p)->f, #f, args)
 
 #define arch_efi_call_virt_teardown()                                  \
 ({                                                                     \
index 0127d84..9d44c69 100644 (file)
@@ -13,20 +13,8 @@ void efifb_setup_from_dmi(struct screen_info *si, const char *opt);
 
 #define ARCH_EFI_IRQ_FLAGS_MASK  0x00000004  /* Bit 2: CSR.CRMD.IE */
 
-#define arch_efi_call_virt_setup()               \
-({                                               \
-})
-
-#define arch_efi_call_virt(p, f, args...)        \
-({                                               \
-       efi_##f##_t * __f;                       \
-       __f = p->f;                              \
-       __f(args);                               \
-})
-
-#define arch_efi_call_virt_teardown()            \
-({                                               \
-})
+#define arch_efi_call_virt_setup()
+#define arch_efi_call_virt_teardown()
 
 #define EFI_ALLOC_ALIGN                SZ_64K
 
index cc4f678..f74879a 100644 (file)
@@ -23,8 +23,6 @@ int efi_set_mapping_permissions(struct mm_struct *mm, efi_memory_desc_t *md);
 #define arch_efi_call_virt_setup()      efi_virtmap_load()
 #define arch_efi_call_virt_teardown()   efi_virtmap_unload()
 
-#define arch_efi_call_virt(p, f, args...) p->f(args)
-
 #define ARCH_EFI_IRQ_FLAGS_MASK (SR_IE | SR_SPIE)
 
 /* Load initrd anywhere in system RAM */
index eb90206..9a63dd1 100644 (file)
@@ -100,8 +100,6 @@ static inline void efi_fpu_end(void)
        efi_fpu_end();                                                  \
 })
 
-#define arch_efi_call_virt(p, f, args...)      p->f(args)
-
 #else /* !CONFIG_X86_32 */
 
 #define EFI_LOADER_SIGNATURE   "EL64"
@@ -121,6 +119,7 @@ extern asmlinkage u64 __efi_call(void *fp, ...);
        efi_enter_mm();                                                 \
 })
 
+#undef arch_efi_call_virt
 #define arch_efi_call_virt(p, f, args...) ({                           \
        u64 ret, ibt = ibt_save();                                      \
        ret = efi_call((void *)p->f, args);                             \
index 93ce85a..9ff63ac 100644 (file)
@@ -1200,6 +1200,8 @@ static inline void efi_check_for_embedded_firmwares(void) { }
 
 efi_status_t efi_random_get_seed(void);
 
+#define arch_efi_call_virt(p, f, args...)      ((p)->f(args))
+
 /*
  * Arch code can implement the following three template macros, avoiding
  * reptition for the void/non-void return cases of {__,}efi_call_virt():