summaryrefslogtreecommitdiff
path: root/arch/powerpc/kernel/machine_kexec.c
diff options
context:
space:
mode:
authorAnton Blanchard <anton@samba.org>2011-07-31 19:27:35 +0000
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2011-08-05 14:47:56 +1000
commit8aa6d359298ad284a202dc43f103e2f8100a6e82 (patch)
tree4dc91f5e0e62747743bd497ca8490a7093e55525 /arch/powerpc/kernel/machine_kexec.c
parentb59a1bfcc2406ea75346977ad016cfe909a762ac (diff)
downloadlwn-8aa6d359298ad284a202dc43f103e2f8100a6e82.tar.gz
lwn-8aa6d359298ad284a202dc43f103e2f8100a6e82.zip
powerpc: Move kdump default base address to half RMO size on 64bit
We are seeing boot failures on some very large boxes even with commit b5416ca9f824 (powerpc: Move kdump default base address to 64MB on 64bit). This patch halves the RMO so both kernels get about the same amount of RMO memory. On large machines this region will be at least 256MB, so each kernel will get 128MB. We cap it at 256MB (small SLB size) since some early allocations need to be in the bolted SLB region. We could relax this on machines with 1TB SLBs in a future patch. Signed-off-by: Anton Blanchard <anton@samba.org> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/kernel/machine_kexec.c')
-rw-r--r--arch/powerpc/kernel/machine_kexec.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/arch/powerpc/kernel/machine_kexec.c b/arch/powerpc/kernel/machine_kexec.c
index 6658a1589955..9ce1672afb59 100644
--- a/arch/powerpc/kernel/machine_kexec.c
+++ b/arch/powerpc/kernel/machine_kexec.c
@@ -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);