efi: Simplify arch_efi_call_virt() macro
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2122317 Conflicts: arch/loongarch/include/asm/efi.h - not included in centos-9, so this part of the commit was omitted arch/x86/include/asm/efi.h - context differences caused the second stanza's undef to fail to apply. Applied it by hand. commit 8add9a3a2243166f8f60fc20e876caaf30a333f7 Author: Sudeep Holla <sudeep.holla@arm.com> Date: Tue, 28 Jun 2022 15:18:21 +0100 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> Signed-off-by: Mark Langsdorf <mlangsdo@redhat.com>
This commit is contained in:
parent
55a0efa3f3
commit
ed88433ff2
|
@ -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)
|
||||
|
|
|
@ -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() \
|
||||
({ \
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -99,8 +99,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"
|
||||
|
@ -120,8 +118,9 @@ extern asmlinkage u64 __efi_call(void *fp, ...);
|
|||
efi_enter_mm(); \
|
||||
})
|
||||
|
||||
#undef arch_efi_call_virt
|
||||
#define arch_efi_call_virt(p, f, args...) \
|
||||
efi_call((void *)p->f, args) \
|
||||
efi_call((void *)p->f, args)
|
||||
|
||||
#define arch_efi_call_virt_teardown() \
|
||||
({ \
|
||||
|
|
|
@ -1185,6 +1185,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():
|
||||
|
|
Loading…
Reference in New Issue