|
@@ -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");
|