x86: Add xloadflags bit for EFI runtime support on kexec
authorDave Young <dyoung@redhat.com>
Fri, 20 Dec 2013 10:02:20 +0000 (18:02 +0800)
committerMatt Fleming <matt.fleming@intel.com>
Sun, 29 Dec 2013 13:09:06 +0000 (13:09 +0000)
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>
Documentation/x86/boot.txt
arch/x86/boot/header.S
arch/x86/include/uapi/asm/bootparam.h

index f4f268c2b826de7f03b1c2bd2478a85eacd58f2e..cb81741d3b0bd92b70aa87918e632edd0bfef3f1 100644 (file)
@@ -608,6 +608,9 @@ Protocol:       2.12+
        - If 1, the kernel supports the 64-bit EFI handoff entry point
           given at handover_offset + 0x200.
 
+  Bit 4 (read): XLF_EFI_KEXEC
+       - If 1, the kernel supports kexec EFI boot with EFI runtime support.
+
 Field name:    cmdline_size
 Type:          read
 Offset/size:   0x238/4
index 9ec06a1f6d61b2d64f6520bb68d1b0e047af1276..ec3b8ba68096c5434d523c1182196f6ab42f8239 100644 (file)
@@ -391,7 +391,14 @@ xloadflags:
 #else
 # define XLF23 0
 #endif
-                       .word XLF0 | XLF1 | XLF23
+
+#if defined(CONFIG_X86_64) && defined(CONFIG_EFI) && defined(CONFIG_KEXEC)
+# define XLF4 XLF_EFI_KEXEC
+#else
+# define XLF4 0
+#endif
+
+                       .word XLF0 | XLF1 | XLF23 | XLF4
 
 cmdline_size:   .long   COMMAND_LINE_SIZE-1     #length of the command line,
                                                 #added with boot protocol
index 64fe421aab65ef5f21e0d6da4a10954d2dbcd762..225b0988043a0a78ac9092a9af7a265122c685cd 100644 (file)
@@ -24,6 +24,7 @@
 #define XLF_CAN_BE_LOADED_ABOVE_4G     (1<<1)
 #define XLF_EFI_HANDOVER_32            (1<<2)
 #define XLF_EFI_HANDOVER_64            (1<<3)
+#define XLF_EFI_KEXEC                  (1<<4)
 
 #ifndef __ASSEMBLY__