mirror of https://gitee.com/openkylin/linux.git
ARM: LPAE: Move page table maintenance macros to pgtable-2level.h
The page table maintenance macros need to be duplicated between the classic and the LPAE MMU so this patch moves those that are not common to the pgtable-2level.h file. Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
This commit is contained in:
parent
a32618d28d
commit
e0c0313bd7
|
@ -140,4 +140,45 @@
|
||||||
#define L_PTE_MT_DEV_CACHED (_AT(pteval_t, 0x0b) << 2) /* 1011 */
|
#define L_PTE_MT_DEV_CACHED (_AT(pteval_t, 0x0b) << 2) /* 1011 */
|
||||||
#define L_PTE_MT_MASK (_AT(pteval_t, 0x0f) << 2)
|
#define L_PTE_MT_MASK (_AT(pteval_t, 0x0f) << 2)
|
||||||
|
|
||||||
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The "pud_xxx()" functions here are trivial when the pmd is folded into
|
||||||
|
* the pud: the pud entry is never bad, always exists, and can't be set or
|
||||||
|
* cleared.
|
||||||
|
*/
|
||||||
|
#define pud_none(pud) (0)
|
||||||
|
#define pud_bad(pud) (0)
|
||||||
|
#define pud_present(pud) (1)
|
||||||
|
#define pud_clear(pudp) do { } while (0)
|
||||||
|
#define set_pud(pud,pudp) do { } while (0)
|
||||||
|
|
||||||
|
static inline pmd_t *pmd_offset(pud_t *pud, unsigned long addr)
|
||||||
|
{
|
||||||
|
return (pmd_t *)pud;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define pmd_bad(pmd) (pmd_val(pmd) & 2)
|
||||||
|
|
||||||
|
#define copy_pmd(pmdpd,pmdps) \
|
||||||
|
do { \
|
||||||
|
pmdpd[0] = pmdps[0]; \
|
||||||
|
pmdpd[1] = pmdps[1]; \
|
||||||
|
flush_pmd_entry(pmdpd); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define pmd_clear(pmdp) \
|
||||||
|
do { \
|
||||||
|
pmdp[0] = __pmd(0); \
|
||||||
|
pmdp[1] = __pmd(0); \
|
||||||
|
clean_pmd_entry(pmdp); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
/* we don't need complex calculations here as the pmd is folded into the pgd */
|
||||||
|
#define pmd_addr_end(addr,end) (end)
|
||||||
|
|
||||||
|
#define set_pte_ext(ptep,pte,ext) cpu_set_pte_ext(ptep,pte,ext)
|
||||||
|
|
||||||
|
#endif /* __ASSEMBLY__ */
|
||||||
|
|
||||||
#endif /* _ASM_PGTABLE_2LEVEL_H */
|
#endif /* _ASM_PGTABLE_2LEVEL_H */
|
||||||
|
|
|
@ -164,41 +164,8 @@ extern pgd_t swapper_pg_dir[PTRS_PER_PGD];
|
||||||
/* to find an entry in a kernel page-table-directory */
|
/* to find an entry in a kernel page-table-directory */
|
||||||
#define pgd_offset_k(addr) pgd_offset(&init_mm, addr)
|
#define pgd_offset_k(addr) pgd_offset(&init_mm, addr)
|
||||||
|
|
||||||
/*
|
|
||||||
* The "pud_xxx()" functions here are trivial when the pmd is folded into
|
|
||||||
* the pud: the pud entry is never bad, always exists, and can't be set or
|
|
||||||
* cleared.
|
|
||||||
*/
|
|
||||||
#define pud_none(pud) (0)
|
|
||||||
#define pud_bad(pud) (0)
|
|
||||||
#define pud_present(pud) (1)
|
|
||||||
#define pud_clear(pudp) do { } while (0)
|
|
||||||
#define set_pud(pud,pudp) do { } while (0)
|
|
||||||
|
|
||||||
|
|
||||||
/* Find an entry in the second-level page table.. */
|
|
||||||
static inline pmd_t *pmd_offset(pud_t *pud, unsigned long addr)
|
|
||||||
{
|
|
||||||
return (pmd_t *)pud;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define pmd_none(pmd) (!pmd_val(pmd))
|
#define pmd_none(pmd) (!pmd_val(pmd))
|
||||||
#define pmd_present(pmd) (pmd_val(pmd))
|
#define pmd_present(pmd) (pmd_val(pmd))
|
||||||
#define pmd_bad(pmd) (pmd_val(pmd) & 2)
|
|
||||||
|
|
||||||
#define copy_pmd(pmdpd,pmdps) \
|
|
||||||
do { \
|
|
||||||
pmdpd[0] = pmdps[0]; \
|
|
||||||
pmdpd[1] = pmdps[1]; \
|
|
||||||
flush_pmd_entry(pmdpd); \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#define pmd_clear(pmdp) \
|
|
||||||
do { \
|
|
||||||
pmdp[0] = __pmd(0); \
|
|
||||||
pmdp[1] = __pmd(0); \
|
|
||||||
clean_pmd_entry(pmdp); \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
static inline pte_t *pmd_page_vaddr(pmd_t pmd)
|
static inline pte_t *pmd_page_vaddr(pmd_t pmd)
|
||||||
{
|
{
|
||||||
|
@ -207,10 +174,6 @@ static inline pte_t *pmd_page_vaddr(pmd_t pmd)
|
||||||
|
|
||||||
#define pmd_page(pmd) pfn_to_page(__phys_to_pfn(pmd_val(pmd) & PHYS_MASK))
|
#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)
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef CONFIG_HIGHPTE
|
#ifndef CONFIG_HIGHPTE
|
||||||
#define __pte_map(pmd) pmd_page_vaddr(*(pmd))
|
#define __pte_map(pmd) pmd_page_vaddr(*(pmd))
|
||||||
#define __pte_unmap(pte) do { } while (0)
|
#define __pte_unmap(pte) do { } while (0)
|
||||||
|
@ -232,7 +195,6 @@ static inline pte_t *pmd_page_vaddr(pmd_t pmd)
|
||||||
#define pte_page(pte) pfn_to_page(pte_pfn(pte))
|
#define pte_page(pte) pfn_to_page(pte_pfn(pte))
|
||||||
#define mk_pte(page,prot) pfn_pte(page_to_pfn(page), prot)
|
#define mk_pte(page,prot) pfn_pte(page_to_pfn(page), prot)
|
||||||
|
|
||||||
#define set_pte_ext(ptep,pte,ext) cpu_set_pte_ext(ptep,pte,ext)
|
|
||||||
#define pte_clear(mm,addr,ptep) set_pte_ext(ptep, __pte(0), 0)
|
#define pte_clear(mm,addr,ptep) set_pte_ext(ptep, __pte(0), 0)
|
||||||
|
|
||||||
#if __LINUX_ARM_ARCH__ < 6
|
#if __LINUX_ARM_ARCH__ < 6
|
||||||
|
|
Loading…
Reference in New Issue