Skip to content

Commit f0420a2

Browse files
sourabhjainssmb49
authored andcommitted
powerpc: Set crashkernel offset to mid of RMA region
BugLink: https://bugs.launchpad.net/bugs/1969107 [ Upstream commit 7c5ed82 ] On large config LPARs (having 192 and more cores), Linux fails to boot due to insufficient memory in the first memblock. It is due to the memory reservation for the crash kernel which starts at 128MB offset of the first memblock. This memory reservation for the crash kernel doesn't leave enough space in the first memblock to accommodate other essential system resources. The crash kernel start address was set to 128MB offset by default to ensure that the crash kernel get some memory below the RMA region which is used to be of size 256MB. But given that the RMA region size can be 512MB or more, setting the crash kernel offset to mid of RMA size will leave enough space for the kernel to allocate memory for other system resources. Since the above crash kernel offset change is only applicable to the LPAR platform, the LPAR feature detection is pushed before the crash kernel reservation. The rest of LPAR specific initialization will still be done during pseries_probe_fw_features as usual. This patch is dependent on changes to paca allocation for boot CPU. It expect boot CPU to discover 1T segment support which is introduced by the patch posted here: https://lists.ozlabs.org/pipermail/linuxppc-dev/2022-January/239175.html Reported-by: Abdul haleem <[email protected]> Signed-off-by: Sourabh Jain <[email protected]> Signed-off-by: Michael Ellerman <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Sasha Levin <[email protected]> (cherry picked from commit 06ee48a4fc25a4bde6e8cce4add30eeee777e301) Signed-off-by: Paolo Pisati <[email protected]>
1 parent e9dcc6e commit f0420a2

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

arch/powerpc/kernel/rtas.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1235,6 +1235,12 @@ int __init early_init_dt_scan_rtas(unsigned long node,
12351235
entryp = of_get_flat_dt_prop(node, "linux,rtas-entry", NULL);
12361236
sizep = of_get_flat_dt_prop(node, "rtas-size", NULL);
12371237

1238+
#ifdef CONFIG_PPC64
1239+
/* need this feature to decide the crashkernel offset */
1240+
if (of_get_flat_dt_prop(node, "ibm,hypertas-functions", NULL))
1241+
powerpc_firmware_features |= FW_FEATURE_LPAR;
1242+
#endif
1243+
12381244
if (basep && entryp && sizep) {
12391245
rtas.base = *basep;
12401246
rtas.entry = *entryp;

arch/powerpc/kexec/core.c

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -147,11 +147,18 @@ void __init reserve_crashkernel(void)
147147
if (!crashk_res.start) {
148148
#ifdef CONFIG_PPC64
149149
/*
150-
* On 64bit we split the RMO in half but cap it at half of
151-
* a small SLB (128MB) since the crash kernel needs to place
152-
* itself and some stacks to be in the first segment.
150+
* On the LPAR platform place the crash kernel to mid of
151+
* RMA size (512MB or more) to ensure the crash kernel
152+
* gets enough space to place itself and some stack to be
153+
* in the first segment. At the same time normal kernel
154+
* also get enough space to allocate memory for essential
155+
* system resource in the first segment. Keep the crash
156+
* kernel starts at 128MB offset on other platforms.
153157
*/
154-
crashk_res.start = min(0x8000000ULL, (ppc64_rma_size / 2));
158+
if (firmware_has_feature(FW_FEATURE_LPAR))
159+
crashk_res.start = ppc64_rma_size / 2;
160+
else
161+
crashk_res.start = min(0x8000000ULL, (ppc64_rma_size / 2));
155162
#else
156163
crashk_res.start = KDUMP_KERNELBASE;
157164
#endif

0 commit comments

Comments
 (0)