diff options
Diffstat (limited to 'arch/mips/kernel/setup.c')
| -rw-r--r-- | arch/mips/kernel/setup.c | 19 | 
1 files changed, 14 insertions, 5 deletions
diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c index c538d6e01b7..a842154d57d 100644 --- a/arch/mips/kernel/setup.c +++ b/arch/mips/kernel/setup.c @@ -300,12 +300,13 @@ static void __init bootmem_init(void)  	int i;  	/* -	 * Init any data related to initrd. It's a nop if INITRD is -	 * not selected. Once that done we can determine the low bound -	 * of usable memory. +	 * Sanity check any INITRD first. We don't take it into account +	 * for bootmem setup initially, rely on the end-of-kernel-code +	 * as our memory range starting point. Once bootmem is inited we +	 * will reserve the area used for the initrd.  	 */ -	reserved_end = max(init_initrd(), -			   (unsigned long) PFN_UP(__pa_symbol(&_end))); +	init_initrd(); +	reserved_end = (unsigned long) PFN_UP(__pa_symbol(&_end));  	/*  	 * max_low_pfn is not a number of pages. The number of pages @@ -362,6 +363,14 @@ static void __init bootmem_init(void)  		max_low_pfn = PFN_DOWN(HIGHMEM_START);  	} +#ifdef CONFIG_BLK_DEV_INITRD +	/* +	 * mapstart should be after initrd_end +	 */ +	if (initrd_end) +		mapstart = max(mapstart, (unsigned long)PFN_UP(__pa(initrd_end))); +#endif +  	/*  	 * Initialize the boot-time allocator with low memory only.  	 */  | 
