Signed-off-by: Andi Kleen <[EMAIL PROTECTED]> --- arch/x86/mm/pageattr.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-)
Index: linux/arch/x86/mm/pageattr.c =================================================================== --- linux.orig/arch/x86/mm/pageattr.c +++ linux/arch/x86/mm/pageattr.c @@ -203,6 +203,7 @@ static int split_large_page(pte_t *kpte, pte_t *pbase, *tmp; struct page *base; unsigned int i, level; + unsigned long ps; #ifdef CONFIG_DEBUG_PAGEALLOC gfp_flags = __GFP_HIGH | __GFP_NOFAIL | __GFP_NOWARN; @@ -225,13 +226,23 @@ static int split_large_page(pte_t *kpte, address = __pa(address); addr = address & PMD_PAGE_MASK; + + ps = PAGE_SIZE; +#ifdef CONFIG_X86_64 + if (level == PG_LEVEL_1G) { + ps = PMD_PAGE_SIZE; + pgprot_val(ref_prot) |= _PAGE_PSE; + addr &= PUD_PAGE_MASK; + } +#endif + pbase = (pte_t *)page_address(base); #ifdef CONFIG_X86_32 paravirt_alloc_pt(&init_mm, page_to_pfn(base)); #endif pgprot_val(ref_prot) &= ~_PAGE_NX; - for (i = 0; i < PTRS_PER_PTE; i++, addr += PAGE_SIZE) + for (i = 0; i < PTRS_PER_PTE; i++, addr += ps) set_pte(&pbase[i], pfn_pte(addr >> PAGE_SHIFT, ref_prot)); /* -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/