From 0a760fcac1deb7c7a1b5add43e1101f3ff2919ed Mon Sep 17 00:00:00 2001 From: Yinghai Lu Date: Sat, 12 Jul 2008 14:32:45 -0700 Subject: [PATCH] --- yaml --- r: 100167 b: refs/heads/master c: 9958e810f8ac92f8a447035ee6555420ba27b847 h: refs/heads/master i: 100165: 90e12d990428f82a3be29f27c96021416dc04234 100163: c60475a5619583f7ecd93aac8807e6f22c3ed5d9 100159: 257f13a723825efa9a4b9d0b4fef1e43440cd756 v: v3 --- [refs] | 2 +- trunk/arch/x86/mm/init_64.c | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 0825b34a5f97..1a5b5a42b7f5 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 965194c15dc9e4f3bc44432b39c441c86af7f11d +refs/heads/master: 9958e810f8ac92f8a447035ee6555420ba27b847 diff --git a/trunk/arch/x86/mm/init_64.c b/trunk/arch/x86/mm/init_64.c index 122bcef222fc..a25cc6fa2207 100644 --- a/trunk/arch/x86/mm/init_64.c +++ b/trunk/arch/x86/mm/init_64.c @@ -763,6 +763,20 @@ unsigned long __init_refok init_memory_mapping(unsigned long start, end_pfn = end>>PAGE_SHIFT; nr_range = save_mr(mr, nr_range, start_pfn, end_pfn, 0); + /* try to merge same page size and continuous */ + for (i = 0; nr_range > 1 && i < nr_range - 1; i++) { + unsigned long old_start; + if (mr[i].end != mr[i+1].start || + mr[i].page_size_mask != mr[i+1].page_size_mask) + continue; + /* move it */ + old_start = mr[i].start; + memmove(&mr[i], &mr[i+1], + (nr_range - 1 - i) * sizeof (struct map_range)); + mr[i].start = old_start; + nr_range--; + } + for (i = 0; i < nr_range; i++) printk(KERN_DEBUG " %010lx - %010lx page %s\n", mr[i].start, mr[i].end,