Hi, Kexec on panic is broken on i386 in 2.6.11-rc3-mm2 because of re-organization of boot memory allocator initialization code. Primary kernel does not boot if kexec is enabled and [EMAIL PROTECTED] command line parameter is passed. After re-organization, kexec is trying to call reserve_bootmem before boot memory allocator has initialized.
This patch fixes the problem. I have moved the call to reserved_bootmem() for kexec for both discontig and contig memory into new setup_bootmem_allocator(). This patch has been generated against 2.6.11-rc4-mm1 Thanks Vivek
Kexec on panic is broken on i386 in 2.6.11-rc3-mm2 because of re-organisation of boot memory allocator code. Primary kernel does not boot if kexec is enabled and [EMAIL PROTECTED] command line parameter is passed. After re-organization, kexec is trying to call reserve_bootmem before boot memory allocator has initialized. This patch fixes the problem. I have moved the call to reserved_bootmem() for kexec for both discontig and contig memory into new setup_bootmem_allocator(). Signed-off-by: Vivek Goyal <[EMAIL PROTECTED]> --- linux-2.6.11-rc4-mm1-root/arch/i386/kernel/setup.c | 10 +++++----- linux-2.6.11-rc4-mm1-root/arch/i386/mm/discontig.c | 5 ----- 2 files changed, 5 insertions(+), 10 deletions(-) diff -puN arch/i386/kernel/setup.c~kexec-reserve-bootmem-fix arch/i386/kernel/setup.c --- linux-2.6.11-rc4-mm1/arch/i386/kernel/setup.c~kexec-reserve-bootmem-fix 2005-02-23 15:13:03.000000000 +0530 +++ linux-2.6.11-rc4-mm1-root/arch/i386/kernel/setup.c 2005-02-23 15:13:03.000000000 +0530 @@ -987,11 +987,6 @@ unsigned long __init find_max_low_pfn(vo printk(KERN_ERR "ignoring highmem size on non-highmem kernel!\n"); #endif } -#ifdef CONFIG_KEXEC - if (crashk_res.start != crashk_res.end) - reserve_bootmem(crashk_res.start, - crashk_res.end - crashk_res.start + 1); -#endif return max_low_pfn; } @@ -1174,6 +1169,11 @@ void __init setup_bootmem_allocator(void } } #endif +#ifdef CONFIG_KEXEC + if (crashk_res.start != crashk_res.end) + reserve_bootmem(crashk_res.start, + crashk_res.end - crashk_res.start + 1); +#endif } /* diff -puN arch/i386/mm/discontig.c~kexec-reserve-bootmem-fix arch/i386/mm/discontig.c --- linux-2.6.11-rc4-mm1/arch/i386/mm/discontig.c~kexec-reserve-bootmem-fix 2005-02-23 15:13:03.000000000 +0530 +++ linux-2.6.11-rc4-mm1-root/arch/i386/mm/discontig.c 2005-02-23 15:13:03.000000000 +0530 @@ -265,11 +265,6 @@ unsigned long __init setup_memory(void) find_max_pfn_node(nid); NODE_DATA(0)->bdata = &node0_bdata; -#ifdef CONFIG_KEXEC - if (crashk_res.start != crashk_res.end) - reserve_bootmem(crashk_res.start, - crashk_res.end - crashk_res.start + 1); -#endif setup_bootmem_allocator(); return max_low_pfn; } _