The patch titled Avoid excessive sorting of early_node_map[] has been removed from the -mm tree. Its filename was avoid-excessive-sorting-of-early_node_map.patch This patch was dropped because it was merged into mainline or a subsystem tree ------------------------------------------------------ Subject: Avoid excessive sorting of early_node_map[] From: Mel Gorman <mel@xxxxxxxxx> find_min_pfn_for_node() and find_min_pfn_with_active_regions() sort early_node_map[] on every call. This is an excessive amount of sorting and that can be avoided. This patch always searches the whole early_node_map[] in find_min_pfn_for_node() instead of returning the first value found. The map is then only sorted once when required. Successfully boot tested on a number of machines. [akpm@xxxxxxxx: cleanup] Signed-off-by: Mel Gorman <mel@xxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- mm/page_alloc.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff -puN mm/page_alloc.c~avoid-excessive-sorting-of-early_node_map mm/page_alloc.c --- a/mm/page_alloc.c~avoid-excessive-sorting-of-early_node_map +++ a/mm/page_alloc.c @@ -2877,20 +2877,23 @@ static void __init sort_node_map(void) cmp_node_active_region, NULL); } -/* Find the lowest pfn for a node. This depends on a sorted early_node_map */ +/* Find the lowest pfn for a node */ unsigned long __init find_min_pfn_for_node(unsigned long nid) { int i; - - /* Regions in the early_node_map can be in any order */ - sort_node_map(); + unsigned long min_pfn = ULONG_MAX; /* Assuming a sorted map, the first range found has the starting pfn */ for_each_active_range_index_in_nid(i, nid) - return early_node_map[i].start_pfn; + min_pfn = min(min_pfn, early_node_map[i].start_pfn); - printk(KERN_WARNING "Could not find start_pfn for node %lu\n", nid); - return 0; + if (min_pfn == ULONG_MAX) { + printk(KERN_WARNING + "Could not find start_pfn for node %lu\n", nid); + return 0; + } + + return min_pfn; } /** @@ -2939,6 +2942,9 @@ void __init free_area_init_nodes(unsigne unsigned long nid; enum zone_type i; + /* Sort early_node_map as initialisation assumes it is sorted */ + sort_node_map(); + /* Record where the zone boundaries are */ memset(arch_zone_lowest_possible_pfn, 0, sizeof(arch_zone_lowest_possible_pfn)); _ Patches currently in -mm which might be from mel@xxxxxxxxx are origin.patch ext2-reservations.patch add-debugging-aid-for-memory-initialisation-problems.patch add-debugging-aid-for-memory-initialisation-problems-fix.patch - To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html