For supporting efi runtime on kexec kernel we need to
fill the efi_info struct in setup_header. I just get
the info in kernel exported boot_params data in debugfs.

Signed-off-by: Dave Young <[email protected]>
---
--- kexec-tools.orig/include/x86/x86-linux.h
+++ kexec-tools/include/x86/x86-linux.h
@@ -115,7 +115,8 @@ struct x86_linux_param_header {
        uint32_t ext_ramdisk_image;             /* 0xc0 */
        uint32_t ext_ramdisk_size;              /* 0xc4 */
        uint32_t ext_cmd_line_ptr;              /* 0xc8 */
-       uint8_t reserved4_1[0x1e0 - 0xcc];      /* 0xcc */
+       uint8_t reserved4_1[0x1c0 - 0xcc];      /* 0xcc */
+       uint8_t efi_info[32];                   /* 0x1c0 */
        uint32_t alt_mem_k;                     /* 0x1e0 */
        uint8_t  reserved5[4];                  /* 0x1e4 */
        uint8_t  e820_map_nr;                   /* 0x1e8 */
--- kexec-tools.orig/kexec/arch/i386/x86-linux-setup.c
+++ kexec-tools/kexec/arch/i386/x86-linux-setup.c
@@ -466,6 +466,13 @@ void setup_subarch(struct x86_linux_para
        get_bootparam(&real_mode->hardware_subarch, offset, sizeof(uint32_t));
 }
 
+void setup_efi_info(struct x86_linux_param_header *real_mode)
+{
+       off_t offset = offsetof(typeof(*real_mode), efi_info);
+
+       get_bootparam(&real_mode->efi_info, offset, 32);
+}
+
 void setup_linux_system_parameters(struct kexec_info *info,
                                   struct x86_linux_param_header *real_mode)
 {
@@ -475,6 +482,7 @@ void setup_linux_system_parameters(struc
 
        /* get subarch from running kernel */
        setup_subarch(real_mode);
+       setup_efi_info(real_mode);
        
        /* Default screen size */
        real_mode->orig_x = 0;


_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec

Reply via email to