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 --- --- 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;