lkml.org 
[lkml]   [2011]   [Aug]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v7 06/16] ARM: LPAE: Use a mask for physical addresses in page table entries
    Date
    With LPAE, the physical address mask is 40-bit while the page table
    entry is 64-bit. This patch introduces PHYS_MASK for the 2-level page
    table format, defined as ~0UL.

    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    ---
    arch/arm/include/asm/pgtable-2level-hwdef.h | 2 ++
    arch/arm/include/asm/pgtable.h | 6 +++---
    2 files changed, 5 insertions(+), 3 deletions(-)

    diff --git a/arch/arm/include/asm/pgtable-2level-hwdef.h b/arch/arm/include/asm/pgtable-2level-hwdef.h
    index 2b52c40..5cfba15 100644
    --- a/arch/arm/include/asm/pgtable-2level-hwdef.h
    +++ b/arch/arm/include/asm/pgtable-2level-hwdef.h
    @@ -88,4 +88,6 @@
    #define PTE_SMALL_AP_URO_SRW (_AT(pteval_t, 0xaa) << 4)
    #define PTE_SMALL_AP_URW_SRW (_AT(pteval_t, 0xff) << 4)

    +#define PHYS_MASK (~0UL)
    +
    #endif
    diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h
    index 9618052..8f9e1dd 100644
    --- a/arch/arm/include/asm/pgtable.h
    +++ b/arch/arm/include/asm/pgtable.h
    @@ -199,10 +199,10 @@ static inline pmd_t *pmd_offset(pud_t *pud, unsigned long addr)

    static inline pte_t *pmd_page_vaddr(pmd_t pmd)
    {
    - return __va(pmd_val(pmd) & PAGE_MASK);
    + return __va(pmd_val(pmd) & PHYS_MASK & (s32)PAGE_MASK);
    }

    -#define pmd_page(pmd) pfn_to_page(__phys_to_pfn(pmd_val(pmd)))
    +#define pmd_page(pmd) pfn_to_page(__phys_to_pfn(pmd_val(pmd) & PHYS_MASK))

    /* we don't need complex calculations here as the pmd is folded into the pgd */
    #define pmd_addr_end(addr,end) (end)
    @@ -223,7 +223,7 @@ static inline pte_t *pmd_page_vaddr(pmd_t pmd)
    #define pte_offset_map(pmd,addr) (__pte_map(pmd) + pte_index(addr))
    #define pte_unmap(pte) __pte_unmap(pte)

    -#define pte_pfn(pte) (pte_val(pte) >> PAGE_SHIFT)
    +#define pte_pfn(pte) ((pte_val(pte) & PHYS_MASK) >> PAGE_SHIFT)
    #define pfn_pte(pfn,prot) __pte(__pfn_to_phys(pfn) | pgprot_val(prot))

    #define pte_page(pte) pfn_to_page(pte_pfn(pte))


    \
     
     \ /
      Last update: 2011-08-10 17:07    [W:0.024 / U:0.404 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site