|
@@ -136,12 +136,16 @@ void __init reserve_crashkernel(void)
|
|
|
crashk_res.start = KDUMP_KERNELBASE;
|
|
|
#else
|
|
|
if (!crashk_res.start) {
|
|
|
+#ifdef CONFIG_PPC64
|
|
|
/*
|
|
|
- * unspecified address, choose a region of specified size
|
|
|
- * can overlap with initrd (ignoring corruption when retained)
|
|
|
- * ppc64 requires kernel and some stacks to be in first segemnt
|
|
|
+ * On 64bit we split the RMO in half but cap it at half of
|
|
|
+ * a small SLB (128MB) since the crash kernel needs to place
|
|
|
+ * itself and some stacks to be in the first segment.
|
|
|
*/
|
|
|
+ crashk_res.start = min(0x80000000ULL, (ppc64_rma_size / 2));
|
|
|
+#else
|
|
|
crashk_res.start = KDUMP_KERNELBASE;
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
crash_base = PAGE_ALIGN(crashk_res.start);
|