From: Andy Whitcroft <apw@shadowen.org>

Testing seems to confirm that we do not need to handle the first memory
block specially in do_init_bootmem.

Signed-off-by: Andy Whitcroft <apw@shadowen.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 arch/ppc64/mm/init.c |   21 +++++++--------------
 1 files changed, 7 insertions(+), 14 deletions(-)

diff -puN arch/ppc64/mm/init.c~ppc64-sparsemem-memory-model-fix-2 arch/ppc64/mm/init.c
--- 25/arch/ppc64/mm/init.c~ppc64-sparsemem-memory-model-fix-2	Tue May 17 16:56:42 2005
+++ 25-akpm/arch/ppc64/mm/init.c	Tue May 17 16:56:42 2005
@@ -613,14 +613,6 @@ void __init do_init_bootmem(void)
 	unsigned long start, bootmap_pages;
 	unsigned long total_pages = lmb_end_of_DRAM() >> PAGE_SHIFT;
 	int boot_mapsize;
-	unsigned long start_pfn, end_pfn;
-	/*
-	 * Note presence of first (logical/coalasced) LMB which will
-	 * contain RMO region
-	 */
-	start_pfn = lmb.memory.region[0].physbase >> PAGE_SHIFT;
-	end_pfn = start_pfn + (lmb.memory.region[0].size >> PAGE_SHIFT);
-	memory_present(0, start_pfn, end_pfn);
 
 	/*
 	 * Find an area to use for the bootmem bitmap.  Calculate the size of
@@ -637,18 +629,19 @@ void __init do_init_bootmem(void)
 	max_pfn = max_low_pfn;
 
 	/* Add all physical memory to the bootmem map, mark each area
-	 * present.  The first block has already been marked present above.
+	 * present.
 	 */
 	for (i=0; i < lmb.memory.cnt; i++) {
 		unsigned long physbase, size;
+		unsigned long start_pfn, end_pfn;
 
 		physbase = lmb.memory.region[i].physbase;
 		size = lmb.memory.region[i].size;
-		if (i) {
-			start_pfn = physbase >> PAGE_SHIFT;
-			end_pfn = start_pfn + (size >> PAGE_SHIFT);
-			memory_present(0, start_pfn, end_pfn);
-		}
+
+		start_pfn = physbase >> PAGE_SHIFT;
+		end_pfn = start_pfn + (size >> PAGE_SHIFT);
+		memory_present(0, start_pfn, end_pfn);
+
 		free_bootmem(physbase, size);
 	}
 
_