Thread (2 messages) 2 messages, 1 author, 22d ago
DORMANTno replies

[RFC PATCH 1/1] powerpc/fadump: move crash memory reservation to middle of RAM

From: Sourabh Jain <hidden>
Date: 2026-06-06 15:18:26
Subsystem: linux for powerpc (32-bit and 64-bit), the rest · Maintainers: Madhavan Srinivasan, Michael Ellerman, Linus Torvalds

Currently, the fadump crash memory reservation base is derived from
the crashkernel reservation size. For example, with crashkernel=768M,
the crash memory area is preferably placed at 768M physical address.
If a suitable reservation area is not available due to memory holes or
reserved ranges, the base address is adjusted accordingly.

When a kernel crashes with fadump enabled, the system performs a reboot
and the next kernel boots with special device tree properties added by
firmware to indicate an active dump. During this reboot flow, GRUB is
invoked again before the capture kernel boots.

To preserve the crashed kernel memory, GRUB operation must stay below
the fadump crash memory reservation area. Currently this works because
fadump requires a minimum crashkernel reservation of 768M, which ensures
that the fadump memory reservation base address is at least 768M.

However, if GRUB increases its memory access range in future, it may
overwrite the preserved crash memory before the capture kernel boots,
resulting in dump corruption.

Avoid this dependency by moving the fadump crash memory reservation
base to the middle of system RAM instead of deriving it from the
crashkernel reservation size.

Signed-off-by: Sourabh Jain <redacted>
---
 arch/powerpc/kernel/fadump.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/arch/powerpc/kernel/fadump.c b/arch/powerpc/kernel/fadump.c
index 501d43bf18f3..1b4a330b7de0 100644
--- a/arch/powerpc/kernel/fadump.c
+++ b/arch/powerpc/kernel/fadump.c
@@ -586,7 +586,11 @@ int __init fadump_reserve_mem(void)
 	else
 		mem_boundary = memblock_end_of_DRAM();
 
-	base = fw_dump.boot_mem_top;
+	if (fw_dump.dump_active)
+		base = fw_dump.boot_mem_top;
+	else
+		base = mem_boundary / 2;
+
 	size = get_fadump_area_size();
 	fw_dump.reserve_dump_area_size = size;
 	if (fw_dump.dump_active) {
-- 
2.52.0

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help