[PATCH] powerpc: Don't overwrite flat device tree with kdump kernel
Haren Myneni
haren at us.ibm.com
Sat Feb 4 06:03:11 EST 2006
Michael Ellerman wrote:
>It's possible for prom_init to allocate the flat device tree inside the
>kdump crash kernel region. If this happens, when we load the kdump kernel we
>overwrite the flattened device tree, which is bad.
>
>We could make prom_init try and avoid allocating inside the crash kernel
>region, but then we run into issues if the crash kernel region uses all the
>space inside the RMO. The easiest solution is to move the flat device tree
>once we're running in the kernel.
>
>Signed-off-by: Michael Ellerman <michael at ellerman.id.au>
>---
>
> arch/powerpc/kernel/prom.c | 27 +++++++++++++++++++++++++++
> arch/powerpc/kernel/setup_64.c | 3 +++
> include/asm-powerpc/prom.h | 2 ++
> 3 files changed, 32 insertions(+)
>
>Index: kdump/arch/powerpc/kernel/prom.c
>===================================================================
>--- kdump.orig/arch/powerpc/kernel/prom.c
>+++ kdump/arch/powerpc/kernel/prom.c
>@@ -1913,3 +1913,30 @@ int prom_update_property(struct device_n
>
> return 0;
> }
>+
>+#ifdef CONFIG_KEXEC
>+/* We may have allocated the flat device tree inside the crash kernel region
>+ * in prom_init. If so we need to move it out into regular memory. */
>+void kdump_move_device_tree(void)
>
>
Should be void __init kdump_move_device_tree(void)
>+{
>+ unsigned long start, end;
>+ struct boot_param_header *new;
>+
>+ start = __pa((unsigned long)initial_boot_params);
>+ end = start + initial_boot_params->totalsize;
>+
>+ if (end < crashk_res.start || start > crashk_res.end)
>+ return;
>+
>+ new = (struct boot_param_header*)
>+ __va(lmb_alloc(initial_boot_params->totalsize, PAGE_SIZE));
>+
>+ memcpy(new, initial_boot_params, initial_boot_params->totalsize);
>
>
We are touching the second kernel memory and the kexec boot will not
initialize this region. So, reset this memory.
memset((void *)initial_boot_params, 0, initial_boot_params->totalsize);
Thanks
Haren
More information about the Linuxppc64-dev
mailing list