Messages in this thread | | | From | Penttilä Mika <> | Subject | Re: [PATCH] x86_64: do not assume head_64.S used 4KB pages when !use_pse | Date | Thu, 23 Jun 2011 12:38:54 +0000 |
| |
> From: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> head_64.S, which sets up the initial page table on x86_64, is not aware > of PSE being enabled or disabled and it always allocates the initial > mapping using 2MB pages.
> Therefore on x86_64 find_early_table_space shouldn't update the amount > of pages needed for pte pages depending on the size of the initial > mapping, because we know for sure that no pte pages have been allocated > yet.
> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> > Reported-by: Ingo Molnar <mingo@elte.hu> > --- > arch/x86/mm/init.c | 7 +++++++ > 1 files changed, 7 insertions(+), 0 deletions(-)
> diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c > index 36bacfe..1e3098b 100644 > --- a/arch/x86/mm/init.c > +++ b/arch/x86/mm/init.c > @@ -42,12 +42,19 @@ static void __init find_early_table_space(unsigned long start, > (PMD_SIZE * PTRS_PER_PMD)); > pmd_mapped *= (PMD_SIZE * PTRS_PER_PMD); > > + /* > + * On x86_64 do not limit the size we need to cover with 4KB pages > + * depending on the initial allocation because head_64.S always uses > + * 2MB pages. > + */ > +#ifdef CONFIG_X86_32 > if (start < PFN_PHYS(max_pfn_mapped)) { > if (PFN_PHYS(max_pfn_mapped) < end) > size -= PFN_PHYS(max_pfn_mapped) - start; > else > size = 0; > } > +#endif
And arch/x86/mm/init.c also has:
#if defined(CONFIG_DEBUG_PAGEALLOC) || defined(CONFIG_KMEMCHECK) /* * For CONFIG_DEBUG_PAGEALLOC, identity mapping will use small pages. * This will simplify cpa(), which otherwise needs to support splitting * large pages into small in interrupt context, etc. */ use_pse = use_gbpages = 0; #else use_pse = cpu_has_pse; use_gbpages = direct_gbpages; #endif
So big pages are also not used for DEBUG_PAGEALLOC and KMEMCHECK configs even if head_32.S did.
--Mika
| |