[tip: efi/urgent] efi/x86: Revert struct layout change to fix kexec boot regression
From: tip-bot2 for Ard Biesheuvel
Date: Tue Apr 14 2020 - 04:22:54 EST
The following commit has been merged into the efi/urgent branch of tip:
Commit-ID: a088b858f16af85e3db359b6c6aaa92dd3bc0921
Gitweb: https://git.kernel.org/tip/a088b858f16af85e3db359b6c6aaa92dd3bc0921
Author: Ard Biesheuvel <ardb@xxxxxxxxxx>
AuthorDate: Fri, 10 Apr 2020 09:43:20 +02:00
Committer: Ingo Molnar <mingo@xxxxxxxxxx>
CommitterDate: Tue, 14 Apr 2020 08:32:17 +02:00
efi/x86: Revert struct layout change to fix kexec boot regression
Commit
0a67361dcdaa29 ("efi/x86: Remove runtime table address from kexec EFI setup data")
removed the code that retrieves the non-remapped UEFI runtime services
pointer from the data structure provided by kexec, as it was never really
needed on the kexec boot path: mapping the runtime services table at its
non-remapped address is only needed when calling SetVirtualAddressMap(),
which never happens during a kexec boot in the first place.
However, dropping the 'runtime' member from struct efi_setup_data was a
mistake. That struct is shared ABI between the kernel and the kexec tooling
for x86, and so we cannot simply change its layout. So let's put back the
removed field, but call it 'unused' to reflect the fact that we never look
at its contents. While at it, add a comment to remind our future selves
that the layout is external ABI.
Fixes: 0a67361dcdaa29 ("efi/x86: Remove runtime table address from kexec EFI setup data")
Reported-by: Theodore Ts'o <tytso@xxxxxxx>
Tested-by: Theodore Ts'o <tytso@xxxxxxx>
Reviewed-by: Dave Young <dyoung@xxxxxxxxxx>
Signed-off-by: Ard Biesheuvel <ardb@xxxxxxxxxx>
Signed-off-by: Ingo Molnar <mingo@xxxxxxxxxx>
---
arch/x86/include/asm/efi.h | 2 ++
1 file changed, 2 insertions(+)
diff --git a/arch/x86/include/asm/efi.h b/arch/x86/include/asm/efi.h
index cdcf48d..8391c11 100644
--- a/arch/x86/include/asm/efi.h
+++ b/arch/x86/include/asm/efi.h
@@ -178,8 +178,10 @@ extern void efi_free_boot_services(void);
extern pgd_t * __init efi_uv1_memmap_phys_prolog(void);
extern void __init efi_uv1_memmap_phys_epilog(pgd_t *save_pgd);
+/* kexec external ABI */
struct efi_setup_data {
u64 fw_vendor;
+ u64 __unused;
u64 tables;
u64 smbios;
u64 reserved[8];