
From: jbarnes@sgi.com (Jesse Barnes)

Currently, free_all_bootmem_core() assumes that the bdata for a given
node will begin where the node's memory map begins.  This isn't
necessarily true on machines that use a virtual memory map (e.g. ia64
discontig machines), so we fix page to point to the first actual page of
RAM on the node, which _does_ contain the bdata struct.



 mm/bootmem.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletion(-)

diff -puN mm/bootmem.c~free_all_bootmem_core-fix mm/bootmem.c
--- 25/mm/bootmem.c~free_all_bootmem_core-fix	2003-08-04 16:20:50.000000000 -0700
+++ 25-akpm/mm/bootmem.c	2003-08-04 16:20:50.000000000 -0700
@@ -267,7 +267,7 @@ found:
 
 static unsigned long __init free_all_bootmem_core(pg_data_t *pgdat)
 {
-	struct page *page = pgdat->node_mem_map;
+	struct page *page;
 	bootmem_data_t *bdata = pgdat->bdata;
 	unsigned long i, count, total = 0;
 	unsigned long idx;
@@ -276,6 +276,8 @@ static unsigned long __init free_all_boo
 	if (!bdata->node_bootmem_map) BUG();
 
 	count = 0;
+	/* first extant page of the node */
+	page = virt_to_page(phys_to_virt(bdata->node_boot_start));
 	idx = bdata->node_low_pfn - (bdata->node_boot_start >> PAGE_SHIFT);
 	map = bdata->node_bootmem_map;
 	for (i = 0; i < idx; ) {

_
