<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">
Signed-off-by: Mike Kravetz &lt;kravetz@us.ibm.com&gt;
Signed-off-by: Dave Hansen &lt;haveblue@us.ibm.com&gt;
---

 memhotplug-dave/arch/ppc64/mm/init.c |   16 ++++++++--------
 1 files changed, 8 insertions(+), 8 deletions(-)

diff -puN arch/ppc64/mm/init.c~G3-nonlinear-ppc64-kravetz-bootfix arch/ppc64/mm/init.c
--- memhotplug/arch/ppc64/mm/init.c~G3-nonlinear-ppc64-kravetz-bootfix	2004-12-08 14:57:12.000000000 -0800
+++ memhotplug-dave/arch/ppc64/mm/init.c	2004-12-08 14:57:12.000000000 -0800
@@ -604,16 +604,8 @@ void __init do_init_bootmem(void)
 	unsigned long total_pages = lmb_end_of_DRAM() &gt;&gt; PAGE_SHIFT;
 	int boot_mapsize;
 
-#ifdef CONFIG_NONLINEAR
 	setup_memsections();
 	alloc_memsections(0, 0, total_pages);
-#endif
-
-#ifdef CONFIG_NONLINEAR
-	setup_memsections();
-	alloc_memsections(0, 0, total_pages);
-#endif
-
 	/*
 	 * Find an area to use for the bootmem bitmap.  Calculate the size of
 	 * bitmap required as (Total Memory) / PAGE_SIZE / BITS_PER_BYTE.
@@ -656,6 +648,9 @@ void __init paging_init(void)
 	unsigned long total_ram = lmb_phys_mem_size();
 	unsigned long top_of_ram = lmb_end_of_DRAM();
 	unsigned long top_pfn = top_of_ram &gt;&gt; PAGE_SHIFT;
+#ifdef CONFIG_NONLINEAR
+	struct page *lmem_map;
+#endif
 
 
 	printk(KERN_INFO "Top of RAM: 0x%lx, Total RAM: 0x%lx\n",
@@ -671,6 +666,11 @@ void __init paging_init(void)
 	zones_size[ZONE_DMA] = top_pfn;
 	zholes_size[ZONE_DMA] = (top_of_ram - total_ram) &gt;&gt; PAGE_SHIFT;
 
+#ifdef CONFIG_NONLINEAR
+	lmem_map = alloc_bootmem(top_pfn * sizeof(struct page));
+	alloc_memmap(lmem_map, 0, top_pfn);
+#endif
+
 	free_area_init_node(0, &amp;contig_page_data, zones_size,
 			    __pa(PAGE_OFFSET) &gt;&gt; PAGE_SHIFT, zholes_size);
 }
_
</pre></body></html>