diff -urN 2.4.13pre1/arch/i386/mm/init.c ordered/arch/i386/mm/init.c --- 2.4.13pre1/arch/i386/mm/init.c Sun Sep 23 21:11:28 2001 +++ ordered/arch/i386/mm/init.c Fri Oct 12 19:04:54 2001 @@ -469,7 +469,7 @@ if (page_is_ram(tmp) && PageReserved(mem_map+tmp)) reservedpages++; #ifdef CONFIG_HIGHMEM - for (tmp = highstart_pfn; tmp < highend_pfn; tmp++) { + for (tmp = highend_pfn-1; tmp >= highstart_pfn; tmp--) { struct page *page = mem_map + tmp; if (!page_is_ram(tmp)) { diff -urN 2.4.13pre1/mm/bootmem.c ordered/mm/bootmem.c --- 2.4.13pre1/mm/bootmem.c Sun Sep 23 21:11:43 2001 +++ ordered/mm/bootmem.c Fri Oct 12 19:04:56 2001 @@ -237,14 +237,15 @@ { 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); @@ -260,7 +261,9 @@ */ 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);