diff -urNp ref/mm/bootmem.c 2.4.20pre5aa1/mm/bootmem.c --- ref/mm/bootmem.c Thu Aug 29 02:13:21 2002 +++ 2.4.20pre5aa1/mm/bootmem.c Thu Aug 29 20:40:37 2002 @@ -246,14 +246,15 @@ static unsigned long __init free_all_boo { struct page *page = pgdat->node_mem_map; bootmem_data_t *bdata = pgdat->bdata; - unsigned long i, count, total = 0; - unsigned long idx; + unsigned long count, total = 0; + long idx, i; if (!bdata->node_bootmem_map) BUG(); count = 0; idx = bdata->node_low_pfn - (bdata->node_boot_start >> PAGE_SHIFT); - for (i = 0; i < idx; i++, page++) { + page += --idx; + for (i = idx; i >= 0; i--, page--) { if (!test_bit(i, bdata->node_bootmem_map)) { count++; ClearPageReserved(page); @@ -269,7 +270,9 @@ static unsigned long __init free_all_boo */ page = virt_to_page(bdata->node_bootmem_map); count = 0; - for (i = 0; i < ((bdata->node_low_pfn-(bdata->node_boot_start >> PAGE_SHIFT))/8 + PAGE_SIZE-1)/PAGE_SIZE; i++,page++) { + idx = ((bdata->node_low_pfn-(bdata->node_boot_start >> PAGE_SHIFT))/8 + PAGE_SIZE-1)/PAGE_SIZE; + page += --idx; + for (i = idx; i >= 0; i--, page--) { count++; ClearPageReserved(page); set_page_count(page, 1);