diff options
| -rw-r--r-- | arch/x86/kernel/head32.c | 11 | ||||
| -rw-r--r-- | arch/x86/kernel/head64.c | 11 | ||||
| -rw-r--r-- | arch/x86/kernel/setup.c | 22 | 
3 files changed, 18 insertions, 26 deletions
diff --git a/arch/x86/kernel/head32.c b/arch/x86/kernel/head32.c index 6773c918b8cc..a795b54de7d3 100644 --- a/arch/x86/kernel/head32.c +++ b/arch/x86/kernel/head32.c @@ -36,17 +36,6 @@ void __init i386_start_kernel(void)  	memblock_reserve(__pa_symbol(&_text),  			 __pa_symbol(&__bss_stop) - __pa_symbol(&_text)); -#ifdef CONFIG_BLK_DEV_INITRD -	/* Reserve INITRD */ -	if (boot_params.hdr.type_of_loader && boot_params.hdr.ramdisk_image) { -		/* Assume only end is not page aligned */ -		u64 ramdisk_image = boot_params.hdr.ramdisk_image; -		u64 ramdisk_size  = boot_params.hdr.ramdisk_size; -		u64 ramdisk_end   = PAGE_ALIGN(ramdisk_image + ramdisk_size); -		memblock_reserve(ramdisk_image, ramdisk_end - ramdisk_image); -	} -#endif -  	/* Call the subarch specific early setup function */  	switch (boot_params.hdr.hardware_subarch) {  	case X86_SUBARCH_MRST: diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c index f3b19685918e..b88a1fab2158 100644 --- a/arch/x86/kernel/head64.c +++ b/arch/x86/kernel/head64.c @@ -178,17 +178,6 @@ void __init x86_64_start_reservations(char *real_mode_data)  	memblock_reserve(__pa_symbol(&_text),  			 __pa_symbol(&__bss_stop) - __pa_symbol(&_text)); -#ifdef CONFIG_BLK_DEV_INITRD -	/* Reserve INITRD */ -	if (boot_params.hdr.type_of_loader && boot_params.hdr.ramdisk_image) { -		/* Assume only end is not page aligned */ -		unsigned long ramdisk_image = boot_params.hdr.ramdisk_image; -		unsigned long ramdisk_size  = boot_params.hdr.ramdisk_size; -		unsigned long ramdisk_end   = PAGE_ALIGN(ramdisk_image + ramdisk_size); -		memblock_reserve(ramdisk_image, ramdisk_end - ramdisk_image); -	} -#endif -  	reserve_ebda_region();  	/* diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index d58083a2e158..8e356923cbd0 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c @@ -360,6 +360,19 @@ static u64 __init get_mem_size(unsigned long limit_pfn)  	return mapped_pages << PAGE_SHIFT;  } +static void __init early_reserve_initrd(void) +{ +	/* Assume only end is not page aligned */ +	u64 ramdisk_image = boot_params.hdr.ramdisk_image; +	u64 ramdisk_size  = boot_params.hdr.ramdisk_size; +	u64 ramdisk_end   = PAGE_ALIGN(ramdisk_image + ramdisk_size); + +	if (!boot_params.hdr.type_of_loader || +	    !ramdisk_image || !ramdisk_size) +		return;		/* No initrd provided by bootloader */ + +	memblock_reserve(ramdisk_image, ramdisk_end - ramdisk_image); +}  static void __init reserve_initrd(void)  {  	/* Assume only end is not page aligned */ @@ -386,10 +399,6 @@ static void __init reserve_initrd(void)  	if (pfn_range_is_mapped(PFN_DOWN(ramdisk_image),  				PFN_DOWN(ramdisk_end))) {  		/* All are mapped, easy case */ -		/* -		 * don't need to reserve again, already reserved early -		 * in i386_start_kernel -		 */  		initrd_start = ramdisk_image + PAGE_OFFSET;  		initrd_end = initrd_start + ramdisk_size;  		return; @@ -400,6 +409,9 @@ static void __init reserve_initrd(void)  	memblock_free(ramdisk_image, ramdisk_end - ramdisk_image);  }  #else +static void __init early_reserve_initrd(void) +{ +}  static void __init reserve_initrd(void)  {  } @@ -760,6 +772,8 @@ early_param("reservelow", parse_reservelow);  void __init setup_arch(char **cmdline_p)  { +	early_reserve_initrd(); +  #ifdef CONFIG_X86_32  	memcpy(&boot_cpu_data, &new_cpu_data, sizeof(new_cpu_data));  	visws_early_detect();  | 
