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;
 }
_

Reply via email to