diff options
author | Dave Young <dyoung@redhat.com> | 2013-12-20 05:02:20 -0500 |
---|---|---|
committer | Matt Fleming <matt.fleming@intel.com> | 2013-12-29 08:09:06 -0500 |
commit | 456a29ddada79198c5965300e04103c40c481f62 (patch) | |
tree | 3efa843160c0827cb165dbdf8c3b18c05ec98a7c | |
parent | 1fec0533693cd74f2d1a46edd29449cfee429df0 (diff) |
x86: Add xloadflags bit for EFI runtime support on kexec
Old kexec-tools can not load new kernels. The reason is kexec-tools does
not fill efi_info in x86 setup header previously, thus EFI failed to
initialize. In new kexec-tools it will by default to fill efi_info and
pass other EFI required infomation to 2nd kernel so kexec kernel EFI
initialization can succeed finally.
To prevent from breaking userspace, add a new xloadflags bit so
kexec-tools can check the flag and switch to old logic.
Signed-off-by: Dave Young <dyoung@redhat.com>
Acked-by: Borislav Petkov <bp@suse.de>
Tested-by: Toshi Kani <toshi.kani@hp.com>
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
-rw-r--r-- | Documentation/x86/boot.txt | 3 | ||||
-rw-r--r-- | arch/x86/boot/header.S | 9 | ||||
-rw-r--r-- | arch/x86/include/uapi/asm/bootparam.h | 1 |
3 files changed, 12 insertions, 1 deletions
diff --git a/Documentation/x86/boot.txt b/Documentation/x86/boot.txt index f4f268c2b826..cb81741d3b0b 100644 --- a/Documentation/x86/boot.txt +++ b/Documentation/x86/boot.txt | |||
@@ -608,6 +608,9 @@ Protocol: 2.12+ | |||
608 | - If 1, the kernel supports the 64-bit EFI handoff entry point | 608 | - If 1, the kernel supports the 64-bit EFI handoff entry point |
609 | given at handover_offset + 0x200. | 609 | given at handover_offset + 0x200. |
610 | 610 | ||
611 | Bit 4 (read): XLF_EFI_KEXEC | ||
612 | - If 1, the kernel supports kexec EFI boot with EFI runtime support. | ||
613 | |||
611 | Field name: cmdline_size | 614 | Field name: cmdline_size |
612 | Type: read | 615 | Type: read |
613 | Offset/size: 0x238/4 | 616 | Offset/size: 0x238/4 |
diff --git a/arch/x86/boot/header.S b/arch/x86/boot/header.S index 9ec06a1f6d61..ec3b8ba68096 100644 --- a/arch/x86/boot/header.S +++ b/arch/x86/boot/header.S | |||
@@ -391,7 +391,14 @@ xloadflags: | |||
391 | #else | 391 | #else |
392 | # define XLF23 0 | 392 | # define XLF23 0 |
393 | #endif | 393 | #endif |
394 | .word XLF0 | XLF1 | XLF23 | 394 | |
395 | #if defined(CONFIG_X86_64) && defined(CONFIG_EFI) && defined(CONFIG_KEXEC) | ||
396 | # define XLF4 XLF_EFI_KEXEC | ||
397 | #else | ||
398 | # define XLF4 0 | ||
399 | #endif | ||
400 | |||
401 | .word XLF0 | XLF1 | XLF23 | XLF4 | ||
395 | 402 | ||
396 | cmdline_size: .long COMMAND_LINE_SIZE-1 #length of the command line, | 403 | cmdline_size: .long COMMAND_LINE_SIZE-1 #length of the command line, |
397 | #added with boot protocol | 404 | #added with boot protocol |
diff --git a/arch/x86/include/uapi/asm/bootparam.h b/arch/x86/include/uapi/asm/bootparam.h index 64fe421aab65..225b0988043a 100644 --- a/arch/x86/include/uapi/asm/bootparam.h +++ b/arch/x86/include/uapi/asm/bootparam.h | |||
@@ -24,6 +24,7 @@ | |||
24 | #define XLF_CAN_BE_LOADED_ABOVE_4G (1<<1) | 24 | #define XLF_CAN_BE_LOADED_ABOVE_4G (1<<1) |
25 | #define XLF_EFI_HANDOVER_32 (1<<2) | 25 | #define XLF_EFI_HANDOVER_32 (1<<2) |
26 | #define XLF_EFI_HANDOVER_64 (1<<3) | 26 | #define XLF_EFI_HANDOVER_64 (1<<3) |
27 | #define XLF_EFI_KEXEC (1<<4) | ||
27 | 28 | ||
28 | #ifndef __ASSEMBLY__ | 29 | #ifndef __ASSEMBLY__ |
29 | 30 | ||