From: tip-bot for Yinghai Lu <yinghai@kernel.org> To: linux-tip-commits@vger.kernel.org Cc: linux-kernel@vger.kernel.org, hpa@zytor.com, mingo@kernel.org, yinghai@kernel.org, tglx@linutronix.de, hpa@linux.intel.com Subject: [tip:x86/mm2] x86, mm: Use big page size for small memory range Date: Wed, 21 Nov 2012 17:56:08 -0800 Message-ID: <tip-aeebe84cc96cde4181807bc67c300c550d0ef123@git.kernel.org> (raw) In-Reply-To: <1353123563-3103-19-git-send-email-yinghai@kernel.org> Commit-ID: aeebe84cc96cde4181807bc67c300c550d0ef123 Gitweb: http://git.kernel.org/tip/aeebe84cc96cde4181807bc67c300c550d0ef123 Author: Yinghai Lu <yinghai@kernel.org> AuthorDate: Fri, 16 Nov 2012 19:38:55 -0800 Committer: H. Peter Anvin <hpa@linux.intel.com> CommitDate: Sat, 17 Nov 2012 11:59:16 -0800 x86, mm: Use big page size for small memory range We could map small range in the middle of big range at first, so should use big page size at first to avoid using small page size to break down page table. Only can set big page bit when that range has ram area around it. -v2: fix 32bit boundary checking. We can not count ram above max_low_pfn for 32 bit. Signed-off-by: Yinghai Lu <yinghai@kernel.org> Link: http://lkml.kernel.org/r/1353123563-3103-19-git-send-email-yinghai@kernel.org Signed-off-by: H. Peter Anvin <hpa@linux.intel.com> --- arch/x86/mm/init.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c index bb44e9f..da591eb 100644 --- a/arch/x86/mm/init.c +++ b/arch/x86/mm/init.c @@ -88,6 +88,40 @@ static int __meminit save_mr(struct map_range *mr, int nr_range, return nr_range; } +/* + * adjust the page_size_mask for small range to go with + * big page size instead small one if nearby are ram too. + */ +static void __init_refok adjust_range_page_size_mask(struct map_range *mr, + int nr_range) +{ + int i; + + for (i = 0; i < nr_range; i++) { + if ((page_size_mask & (1<<PG_LEVEL_2M)) && + !(mr[i].page_size_mask & (1<<PG_LEVEL_2M))) { + unsigned long start = round_down(mr[i].start, PMD_SIZE); + unsigned long end = round_up(mr[i].end, PMD_SIZE); + +#ifdef CONFIG_X86_32 + if ((end >> PAGE_SHIFT) > max_low_pfn) + continue; +#endif + + if (memblock_is_region_memory(start, end - start)) + mr[i].page_size_mask |= 1<<PG_LEVEL_2M; + } + if ((page_size_mask & (1<<PG_LEVEL_1G)) && + !(mr[i].page_size_mask & (1<<PG_LEVEL_1G))) { + unsigned long start = round_down(mr[i].start, PUD_SIZE); + unsigned long end = round_up(mr[i].end, PUD_SIZE); + + if (memblock_is_region_memory(start, end - start)) + mr[i].page_size_mask |= 1<<PG_LEVEL_1G; + } + } +} + static int __meminit split_mem_range(struct map_range *mr, int nr_range, unsigned long start, unsigned long end) @@ -182,6 +216,9 @@ static int __meminit split_mem_range(struct map_range *mr, int nr_range, nr_range--; } + if (!after_bootmem) + adjust_range_page_size_mask(mr, nr_range); + for (i = 0; i < nr_range; i++) printk(KERN_DEBUG " [mem %#010lx-%#010lx] page %s\n", mr[i].start, mr[i].end - 1,
next prev parent reply index Thread overview: 119+ messages / expand[flat|nested] mbox.gz Atom feed top 2012-11-17 3:38 [PATCH v8 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu 2012-11-17 3:38 ` [PATCH v8 01/46] x86, mm: Add global page_size_mask and probe one time only Yinghai Lu 2012-11-22 1:38 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-17 3:38 ` [PATCH v8 02/46] x86, mm: Split out split_mem_range from init_memory_mapping Yinghai Lu 2012-11-22 1:39 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-17 3:38 ` [PATCH v8 03/46] x86, mm: Move down find_early_table_space() Yinghai Lu 2012-11-22 1:40 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-28 16:50 ` [PATCH v8 03/46] " Konrad Rzeszutek Wilk 2012-11-17 3:38 ` [PATCH v8 04/46] x86, mm: Move init_memory_mapping calling out of setup.c Yinghai Lu 2012-11-22 1:41 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-28 16:50 ` [PATCH v8 04/46] " Konrad Rzeszutek Wilk 2012-11-17 3:38 ` [PATCH v8 05/46] x86, mm: Revert back good_end setting for 64bit Yinghai Lu 2012-11-22 1:42 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-17 3:38 ` [PATCH v8 06/46] x86, mm: Change find_early_table_space() paramters Yinghai Lu 2012-11-22 1:43 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-28 16:50 ` [PATCH v8 06/46] " Konrad Rzeszutek Wilk 2012-11-17 3:38 ` [PATCH v8 07/46] x86, mm: Find early page table buffer together Yinghai Lu 2012-11-22 1:44 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-28 16:50 ` [PATCH v8 07/46] " Konrad Rzeszutek Wilk 2012-11-17 3:38 ` [PATCH v8 08/46] x86, mm: Separate out calculate_table_space_size() Yinghai Lu 2012-11-22 1:45 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-28 16:59 ` [PATCH v8 08/46] " Konrad Rzeszutek Wilk 2012-11-17 3:38 ` [PATCH v8 09/46] x86, mm: Set memblock initial limit to 1M Yinghai Lu 2012-11-22 1:46 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-17 3:38 ` [PATCH v8 10/46] x86, mm: if kernel .text .data .bss are not marked as E820_RAM, complain and fix Yinghai Lu 2012-11-22 1:47 ` [tip:x86/mm2] " tip-bot for Jacob Shin 2012-11-17 3:38 ` [PATCH v8 11/46] x86, mm: Fixup code testing if a pfn is direct mapped Yinghai Lu 2012-11-22 1:48 ` [tip:x86/mm2] " tip-bot for Jacob Shin 2012-11-17 3:38 ` [PATCH v8 12/46] x86, mm: use pfn_range_is_mapped() with CPA Yinghai Lu 2012-11-22 1:49 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-28 17:06 ` [PATCH v8 12/46] " Konrad Rzeszutek Wilk 2012-11-28 19:33 ` Yinghai Lu 2012-11-17 3:38 ` [PATCH v8 13/46] x86, mm: use pfn_range_is_mapped() with gart Yinghai Lu 2012-11-22 1:50 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-28 17:07 ` [PATCH v8 13/46] " Konrad Rzeszutek Wilk 2012-11-17 3:38 ` [PATCH v8 14/46] x86, mm: use pfn_range_is_mapped() with reserve_initrd Yinghai Lu 2012-11-22 1:51 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-28 17:08 ` [PATCH v8 14/46] " Konrad Rzeszutek Wilk 2012-11-28 19:40 ` Yinghai Lu 2012-11-17 3:38 ` [PATCH v8 15/46] x86, mm: Only direct map addresses that are marked as E820_RAM Yinghai Lu 2012-11-22 1:53 ` [tip:x86/mm2] " tip-bot for Jacob Shin 2012-11-28 17:15 ` [PATCH v8 15/46] " Konrad Rzeszutek Wilk 2012-11-28 19:43 ` Yinghai Lu 2012-11-17 3:38 ` [PATCH v8 16/46] x86, mm: relocate initrd under all mem for 64bit Yinghai Lu 2012-11-22 1:54 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-17 3:38 ` [PATCH v8 17/46] x86, mm: Align start address to correct big page size Yinghai Lu 2012-11-22 1:55 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-17 3:38 ` [PATCH v8 18/46] x86, mm: Use big page size for small memory range Yinghai Lu 2012-11-22 1:56 ` tip-bot for Yinghai Lu [this message] 2012-11-17 3:38 ` [PATCH v8 19/46] x86, mm: Don't clear page table if range is ram Yinghai Lu 2012-11-22 1:57 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-17 3:38 ` [PATCH v8 20/46] x86, mm: Break down init_all_memory_mapping Yinghai Lu 2012-11-22 1:58 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-17 3:38 ` [PATCH v8 21/46] x86, mm: setup page table in top-down Yinghai Lu 2012-11-22 1:59 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-28 17:50 ` [PATCH v8 21/46] " Konrad Rzeszutek Wilk 2012-11-28 20:16 ` Yinghai Lu 2012-12-05 21:53 ` Konrad Rzeszutek Wilk 2012-11-17 3:38 ` [PATCH v8 22/46] x86, mm: Remove early_memremap workaround for page table accessing on 64bit Yinghai Lu 2012-11-22 2:00 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-28 18:57 ` [PATCH v8 22/46] " Konrad Rzeszutek Wilk 2012-11-17 3:39 ` [PATCH v8 23/46] x86, mm: Remove parameter in alloc_low_page for 64bit Yinghai Lu 2012-11-22 2:01 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-28 18:57 ` [PATCH v8 23/46] " Konrad Rzeszutek Wilk 2012-11-17 3:39 ` [PATCH v8 24/46] x86, mm: Merge alloc_low_page between 64bit and 32bit Yinghai Lu 2012-11-22 2:02 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-17 3:39 ` [PATCH v8 25/46] x86, mm: Move min_pfn_mapped back to mm/init.c Yinghai Lu 2012-11-22 2:03 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-17 3:39 ` [PATCH v8 26/46] x86, mm, Xen: Remove mapping_pagetable_reserve() Yinghai Lu 2012-11-22 2:04 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-17 3:39 ` [PATCH v8 27/46] x86, mm: Add alloc_low_pages(num) Yinghai Lu 2012-11-22 2:05 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-17 3:39 ` [PATCH v8 28/46] x86, mm: Add pointer about Xen mmu requirement for alloc_low_pages Yinghai Lu 2012-11-22 2:06 ` [tip:x86/mm2] " tip-bot for Stefano Stabellini 2012-11-17 3:39 ` [PATCH v8 29/46] x86, mm: only call early_ioremap_page_table_range_init() once Yinghai Lu 2012-11-22 2:07 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-28 19:02 ` [PATCH v8 29/46] " Konrad Rzeszutek Wilk 2012-11-17 3:39 ` [PATCH v8 30/46] x86, mm: Move back pgt_buf_* to mm/init.c Yinghai Lu 2012-11-22 2:08 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-17 3:39 ` [PATCH v8 31/46] x86, mm: Move init_gbpages() out of setup.c Yinghai Lu 2012-11-22 2:09 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-17 3:39 ` [PATCH v8 32/46] x86, mm: change low/hignmem_pfn_init to static on 32bit Yinghai Lu 2012-11-22 2:10 ` [tip:x86/mm2] x86, mm: change low/ hignmem_pfn_init " tip-bot for Yinghai Lu 2012-11-17 3:39 ` [PATCH v8 33/46] x86, mm: Move function declaration into mm_internal.h Yinghai Lu 2012-11-22 2:11 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-17 3:39 ` [PATCH v8 34/46] x86, mm: Add check before clear pte above max_low_pfn on 32bit Yinghai Lu 2012-11-22 2:13 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-28 19:09 ` [PATCH v8 34/46] " Konrad Rzeszutek Wilk 2012-11-28 20:38 ` Yinghai Lu 2012-11-17 3:39 ` [PATCH v8 35/46] x86, mm: use round_up/down in split_mem_range() Yinghai Lu 2012-11-22 2:14 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-17 3:39 ` [PATCH v8 36/46] x86, mm: use PFN_DOWN " Yinghai Lu 2012-11-22 2:15 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-17 3:39 ` [PATCH v8 37/46] x86, mm: use pfn instead of pos in split_mem_range Yinghai Lu 2012-11-22 2:16 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-17 3:39 ` [PATCH v8 38/46] x86, mm: use limit_pfn for end pfn Yinghai Lu 2012-11-22 2:17 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-17 3:39 ` [PATCH v8 39/46] x86, mm: Unifying after_bootmem for 32bit and 64bit Yinghai Lu 2012-11-22 2:18 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-17 3:39 ` [PATCH v8 40/46] x86, mm: Move after_bootmem to mm_internel.h Yinghai Lu 2012-11-22 2:19 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-17 3:39 ` [PATCH v8 41/46] x86, mm: Use clamp_t() in init_range_memory_mapping Yinghai Lu 2012-11-22 2:20 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-17 3:39 ` [PATCH v8 42/46] x86, mm: kill numa_free_all_bootmem() Yinghai Lu 2012-11-22 2:21 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-17 3:39 ` [PATCH v8 43/46] x86, mm: kill numa_64.h Yinghai Lu 2012-11-22 2:22 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-17 3:39 ` [PATCH v8 44/46] sparc, mm: Remove calling of free_all_bootmem_node() Yinghai Lu 2012-11-22 2:23 ` [tip:x86/mm2] sparc, mm: Remove calling of free_all_bootmem_node( ) tip-bot for Yinghai Lu 2012-11-17 3:39 ` [PATCH v8 45/46] mm: Kill NO_BOOTMEM version free_all_bootmem_node() Yinghai Lu 2012-11-22 2:24 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-17 3:39 ` [PATCH v8 46/46] x86, mm: Let "memmap=" take more entries one time Yinghai Lu 2012-11-22 2:25 ` [tip:x86/mm2] " tip-bot for Yinghai Lu 2012-11-28 19:12 ` [PATCH v8 46/46] " Konrad Rzeszutek Wilk 2012-11-27 21:17 ` [PATCH v8 00/46] x86, mm: map ram from top-down with BRK and memblock Konrad Rzeszutek Wilk 2012-11-28 19:35 ` Konrad Rzeszutek Wilk 2012-11-28 19:47 ` Yinghai Lu 2012-11-28 20:57 ` Konrad Rzeszutek Wilk 2012-11-28 21:06 ` Yinghai Lu
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=tip-aeebe84cc96cde4181807bc67c300c550d0ef123@git.kernel.org \ --to=yinghai@kernel.org \ --cc=hpa@linux.intel.com \ --cc=hpa@zytor.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-tip-commits@vger.kernel.org \ --cc=mingo@kernel.org \ --cc=tglx@linutronix.de \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
LKML Archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/lkml/0 lkml/git/0.git git clone --mirror https://lore.kernel.org/lkml/1 lkml/git/1.git git clone --mirror https://lore.kernel.org/lkml/2 lkml/git/2.git git clone --mirror https://lore.kernel.org/lkml/3 lkml/git/3.git git clone --mirror https://lore.kernel.org/lkml/4 lkml/git/4.git git clone --mirror https://lore.kernel.org/lkml/5 lkml/git/5.git git clone --mirror https://lore.kernel.org/lkml/6 lkml/git/6.git git clone --mirror https://lore.kernel.org/lkml/7 lkml/git/7.git git clone --mirror https://lore.kernel.org/lkml/8 lkml/git/8.git git clone --mirror https://lore.kernel.org/lkml/9 lkml/git/9.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 lkml lkml/ https://lore.kernel.org/lkml \ linux-kernel@vger.kernel.org public-inbox-index lkml Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/org.kernel.vger.linux-kernel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git