diff -rup -X /usr/src/patchset-0.5/bin//dontdiff linux-2.6.17-rc1-106-breakout_mem_init/mm/mem_init.c linux-2.6.17-rc1-107-debug/mm/mem_init.c --- linux-2.6.17-rc1-106-breakout_mem_init/mm/mem_init.c 2006-04-11 23:49:52.000000000 +0100 +++ linux-2.6.17-rc1-107-debug/mm/mem_init.c 2006-04-11 23:52:00.000000000 +0100 @@ -645,13 +645,23 @@ void __init free_bootmem_with_active_reg for_each_active_range_index_in_nid(i, nid) { unsigned long size_pages = 0; unsigned long end_pfn = early_node_map[i].end_pfn; - if (early_node_map[i].start_pfn >= max_low_pfn) + if (early_node_map[i].start_pfn >= max_low_pfn) { + printk("start_pfn %lu >= %lu\n", early_node_map[i].start_pfn, + max_low_pfn); continue; + } - if (end_pfn > max_low_pfn) + if (end_pfn > max_low_pfn) { + printk("end_pfn %lu going back to %lu\n", early_node_map[i].end_pfn, + max_low_pfn); end_pfn = max_low_pfn; + } size_pages = end_pfn - early_node_map[i].start_pfn; + printk("free_bootmem_node(%d, %lu, %lu)\n", + early_node_map[i].nid, + PFN_PHYS(early_node_map[i].start_pfn), + PFN_PHYS(size_pages)); free_bootmem_node(NODE_DATA(early_node_map[i].nid), PFN_PHYS(early_node_map[i].start_pfn), PFN_PHYS(size_pages)); @@ -661,10 +671,15 @@ void __init free_bootmem_with_active_reg void __init memory_present_with_active_regions(int nid) { unsigned int i; - for_each_active_range_index_in_nid(i, nid) + for_each_active_range_index_in_nid(i, nid) { + printk("memory_present(%d, %lu, %lu)\n", + early_node_map[i].nid, + early_node_map[i].start_pfn, + early_node_map[i].end_pfn); memory_present(early_node_map[i].nid, early_node_map[i].start_pfn, early_node_map[i].end_pfn); + } } void __init get_pfn_range_for_nid(unsigned int nid, @@ -752,8 +767,16 @@ unsigned long __init zone_absent_pages_i /* Increase the hole size if the hole is within the zone */ start_pfn = early_node_map[i].start_pfn; if (pfn_range_in_zone(prev_end_pfn, start_pfn, zone_type)) { - BUG_ON(prev_end_pfn > start_pfn); + if (prev_end_pfn > start_pfn) { + printk("prev_end > start_pfn : %lu > %lu\n", + prev_end_pfn, + start_pfn); + BUG(); + } + //BUG_ON(prev_end_pfn > start_pfn); hole_pages += start_pfn - prev_end_pfn; + printk("Hole found index %d: %lu -> %lu\n", + i, prev_end_pfn, start_pfn); } prev_end_pfn = early_node_map[i].end_pfn; @@ -907,17 +930,21 @@ void __init add_active_range(unsigned in unsigned int i; unsigned long pages = end_pfn - start_pfn; + printk("add_active_range(%d, %lu, %lu): ", + nid, start_pfn, end_pfn); /* Merge with existing active regions if possible */ for (i = 0; early_node_map[i].end_pfn; i++) { if (early_node_map[i].nid != nid) continue; if (early_node_map[i].end_pfn == start_pfn) { + printk("Merging forward\n"); early_node_map[i].end_pfn += pages; return; } if (early_node_map[i].start_pfn == (start_pfn + pages)) { + printk("Merging backwards\n"); early_node_map[i].start_pfn -= pages; return; } @@ -933,6 +960,7 @@ void __init add_active_range(unsigned in return; } + printk("New\n"); early_node_map[i].nid = nid; early_node_map[i].start_pfn = start_pfn; early_node_map[i].end_pfn = end_pfn; @@ -962,6 +990,14 @@ static void __init sort_node_map(void) sort(early_node_map, num, sizeof(struct node_active_region), cmp_node_active_region, NULL); + + printk("Dumping sorted node map\n"); + for (num = 0; early_node_map[num].end_pfn; num++) { + printk("entry %lu: %d %lu -> %lu\n", num, + early_node_map[num].nid, + early_node_map[num].start_pfn, + early_node_map[num].end_pfn); + } } unsigned long __init find_min_pfn(void)