[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