diff options
Diffstat (limited to 'arch/x86/kernel/setup.c')
| -rw-r--r-- | arch/x86/kernel/setup.c | 18 | 
1 files changed, 14 insertions, 4 deletions
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index 21c6746338a..a0f52af256a 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c @@ -501,7 +501,18 @@ static inline unsigned long long get_total_mem(void)  	return total << PAGE_SHIFT;  } -#define DEFAULT_BZIMAGE_ADDR_MAX 0x37FFFFFF +/* + * Keep the crash kernel below this limit.  On 32 bits earlier kernels + * would limit the kernel to the low 512 MiB due to mapping restrictions. + * On 64 bits, kexec-tools currently limits us to 896 MiB; increase this + * limit once kexec-tools are fixed. + */ +#ifdef CONFIG_X86_32 +# define CRASH_KERNEL_ADDR_MAX	(512 << 20) +#else +# define CRASH_KERNEL_ADDR_MAX	(896 << 20) +#endif +  static void __init reserve_crashkernel(void)  {  	unsigned long long total_mem; @@ -520,10 +531,10 @@ static void __init reserve_crashkernel(void)  		const unsigned long long alignment = 16<<20;	/* 16M */  		/* -		 *  kexec want bzImage is below DEFAULT_BZIMAGE_ADDR_MAX +		 *  kexec want bzImage is below CRASH_KERNEL_ADDR_MAX  		 */  		crash_base = memblock_find_in_range(alignment, -			       DEFAULT_BZIMAGE_ADDR_MAX, crash_size, alignment); +			       CRASH_KERNEL_ADDR_MAX, crash_size, alignment);  		if (crash_base == MEMBLOCK_ERROR) {  			pr_info("crashkernel reservation failed - No suitable area found.\n"); @@ -769,7 +780,6 @@ void __init setup_arch(char **cmdline_p)  	x86_init.oem.arch_setup(); -	resource_alloc_from_bottom = 0;  	iomem_resource.end = (1ULL << boot_cpu_data.x86_phys_bits) - 1;  	setup_memory_map();  	parse_setup_data();  |