forked from mirrors/linux
		
	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
					
				
					 1 changed files with 11 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -1038,6 +1038,7 @@ struct boot_params *make_boot_params(struct efi_config *c)
 | 
			
		|||
	int i;
 | 
			
		||||
	unsigned long ramdisk_addr;
 | 
			
		||||
	unsigned long ramdisk_size;
 | 
			
		||||
	unsigned long initrd_addr_max;
 | 
			
		||||
 | 
			
		||||
	efi_early = c;
 | 
			
		||||
	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));
 | 
			
		||||
 | 
			
		||||
	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,
 | 
			
		||||
				      (char *)(unsigned long)hdr->cmd_line_ptr,
 | 
			
		||||
				      "initrd=", hdr->initrd_addr_max,
 | 
			
		||||
				      "initrd=", initrd_addr_max,
 | 
			
		||||
				      &ramdisk_addr, &ramdisk_size);
 | 
			
		||||
	if (status != EFI_SUCCESS)
 | 
			
		||||
		goto fail2;
 | 
			
		||||
	hdr->ramdisk_image = ramdisk_addr;
 | 
			
		||||
	hdr->ramdisk_size = ramdisk_size;
 | 
			
		||||
	hdr->ramdisk_image = ramdisk_addr & 0xffffffff;
 | 
			
		||||
	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;
 | 
			
		||||
fail2:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue