lkml.org 
[lkml]   [2008]   [Feb]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] [8/12] GBPAGES: Implement gbpages support in change_page_attr()
    Date

    Signed-off-by: Andi Kleen <ak@suse.de>

    ---
    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));

    /*

    \
     
     \ /
      Last update: 2008-02-01 11:01    [W:0.021 / U:32.068 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site