mirror of https://gitee.com/openkylin/linux.git
x86/efi: Support initrd loaded above 4G
For boot efi kernel directly without bootloader. If the kernel support XLF_CAN_BE_LOADED_ABOVE_4G, we should not limit initrd under hdr->initrd_add_max. Signed-off-by: Yinghai Lu <yinghai@kernel.org> Signed-off-by: Matt Fleming <matt.fleming@intel.com>
This commit is contained in:
parent
98a716b66c
commit
4bf7111f50
|
@ -1038,6 +1038,7 @@ struct boot_params *make_boot_params(struct efi_config *c)
|
||||||
int i;
|
int i;
|
||||||
unsigned long ramdisk_addr;
|
unsigned long ramdisk_addr;
|
||||||
unsigned long ramdisk_size;
|
unsigned long ramdisk_size;
|
||||||
|
unsigned long initrd_addr_max;
|
||||||
|
|
||||||
efi_early = c;
|
efi_early = c;
|
||||||
sys_table = (efi_system_table_t *)(unsigned long)efi_early->table;
|
sys_table = (efi_system_table_t *)(unsigned long)efi_early->table;
|
||||||
|
@ -1100,14 +1101,21 @@ struct boot_params *make_boot_params(struct efi_config *c)
|
||||||
|
|
||||||
memset(sdt, 0, sizeof(*sdt));
|
memset(sdt, 0, sizeof(*sdt));
|
||||||
|
|
||||||
|
if (hdr->xloadflags & XLF_CAN_BE_LOADED_ABOVE_4G)
|
||||||
|
initrd_addr_max = -1UL;
|
||||||
|
else
|
||||||
|
initrd_addr_max = hdr->initrd_addr_max;
|
||||||
|
|
||||||
status = handle_cmdline_files(sys_table, image,
|
status = handle_cmdline_files(sys_table, image,
|
||||||
(char *)(unsigned long)hdr->cmd_line_ptr,
|
(char *)(unsigned long)hdr->cmd_line_ptr,
|
||||||
"initrd=", hdr->initrd_addr_max,
|
"initrd=", initrd_addr_max,
|
||||||
&ramdisk_addr, &ramdisk_size);
|
&ramdisk_addr, &ramdisk_size);
|
||||||
if (status != EFI_SUCCESS)
|
if (status != EFI_SUCCESS)
|
||||||
goto fail2;
|
goto fail2;
|
||||||
hdr->ramdisk_image = ramdisk_addr;
|
hdr->ramdisk_image = ramdisk_addr & 0xffffffff;
|
||||||
hdr->ramdisk_size = ramdisk_size;
|
hdr->ramdisk_size = ramdisk_size & 0xffffffff;
|
||||||
|
boot_params->ext_ramdisk_image = (u64)ramdisk_addr >> 32;
|
||||||
|
boot_params->ext_ramdisk_size = (u64)ramdisk_size >> 32;
|
||||||
|
|
||||||
return boot_params;
|
return boot_params;
|
||||||
fail2:
|
fail2:
|
||||||
|
|
Loading…
Reference in New Issue