diff options
| -rw-r--r-- | arch/arm/include/asm/pgtable-3level.h | 12 | ||||
| -rw-r--r-- | arch/arm/include/asm/pgtable.h | 18 |
2 files changed, 19 insertions, 11 deletions
diff --git a/arch/arm/include/asm/pgtable-3level.h b/arch/arm/include/asm/pgtable-3level.h index 85c60adc8b60..34f371c4bbb2 100644 --- a/arch/arm/include/asm/pgtable-3level.h +++ b/arch/arm/include/asm/pgtable-3level.h | |||
| @@ -207,17 +207,21 @@ static inline pmd_t *pmd_offset(pud_t *pud, unsigned long addr) | |||
| 207 | #define pte_huge(pte) (pte_val(pte) && !(pte_val(pte) & PTE_TABLE_BIT)) | 207 | #define pte_huge(pte) (pte_val(pte) && !(pte_val(pte) & PTE_TABLE_BIT)) |
| 208 | #define pte_mkhuge(pte) (__pte(pte_val(pte) & ~PTE_TABLE_BIT)) | 208 | #define pte_mkhuge(pte) (__pte(pte_val(pte) & ~PTE_TABLE_BIT)) |
| 209 | 209 | ||
| 210 | #define pmd_young(pmd) (pmd_val(pmd) & PMD_SECT_AF) | 210 | #define pmd_isset(pmd, val) ((u32)(val) == (val) ? pmd_val(pmd) & (val) \ |
| 211 | : !!(pmd_val(pmd) & (val))) | ||
| 212 | #define pmd_isclear(pmd, val) (!(pmd_val(pmd) & (val))) | ||
| 213 | |||
| 214 | #define pmd_young(pmd) (pmd_isset((pmd), PMD_SECT_AF)) | ||
| 211 | 215 | ||
| 212 | #define __HAVE_ARCH_PMD_WRITE | 216 | #define __HAVE_ARCH_PMD_WRITE |
| 213 | #define pmd_write(pmd) (!(pmd_val(pmd) & PMD_SECT_RDONLY)) | 217 | #define pmd_write(pmd) (pmd_isclear((pmd), PMD_SECT_RDONLY)) |
| 214 | 218 | ||
| 215 | #define pmd_hugewillfault(pmd) (!pmd_young(pmd) || !pmd_write(pmd)) | 219 | #define pmd_hugewillfault(pmd) (!pmd_young(pmd) || !pmd_write(pmd)) |
| 216 | #define pmd_thp_or_huge(pmd) (pmd_huge(pmd) || pmd_trans_huge(pmd)) | 220 | #define pmd_thp_or_huge(pmd) (pmd_huge(pmd) || pmd_trans_huge(pmd)) |
| 217 | 221 | ||
| 218 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE | 222 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE |
| 219 | #define pmd_trans_huge(pmd) (pmd_val(pmd) && !(pmd_val(pmd) & PMD_TABLE_BIT)) | 223 | #define pmd_trans_huge(pmd) (pmd_val(pmd) && !pmd_table(pmd)) |
| 220 | #define pmd_trans_splitting(pmd) (pmd_val(pmd) & PMD_SECT_SPLITTING) | 224 | #define pmd_trans_splitting(pmd) (pmd_isset((pmd), PMD_SECT_SPLITTING)) |
| 221 | #endif | 225 | #endif |
| 222 | 226 | ||
| 223 | #define PMD_BIT_FUNC(fn,op) \ | 227 | #define PMD_BIT_FUNC(fn,op) \ |
diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h index 5478e5d6ad89..01baef07cd0c 100644 --- a/arch/arm/include/asm/pgtable.h +++ b/arch/arm/include/asm/pgtable.h | |||
| @@ -214,18 +214,22 @@ static inline pte_t *pmd_page_vaddr(pmd_t pmd) | |||
| 214 | 214 | ||
| 215 | #define pte_clear(mm,addr,ptep) set_pte_ext(ptep, __pte(0), 0) | 215 | #define pte_clear(mm,addr,ptep) set_pte_ext(ptep, __pte(0), 0) |
| 216 | 216 | ||
| 217 | #define pte_isset(pte, val) ((u32)(val) == (val) ? pte_val(pte) & (val) \ | ||
| 218 | : !!(pte_val(pte) & (val))) | ||
| 219 | #define pte_isclear(pte, val) (!(pte_val(pte) & (val))) | ||
| 220 | |||
| 217 | #define pte_none(pte) (!pte_val(pte)) | 221 | #define pte_none(pte) (!pte_val(pte)) |
| 218 | #define pte_present(pte) (pte_val(pte) & L_PTE_PRESENT) | 222 | #define pte_present(pte) (pte_isset((pte), L_PTE_PRESENT)) |
| 219 | #define pte_valid(pte) (pte_val(pte) & L_PTE_VALID) | 223 | #define pte_valid(pte) (pte_isset((pte), L_PTE_VALID)) |
| 220 | #define pte_accessible(mm, pte) (mm_tlb_flush_pending(mm) ? pte_present(pte) : pte_valid(pte)) | 224 | #define pte_accessible(mm, pte) (mm_tlb_flush_pending(mm) ? pte_present(pte) : pte_valid(pte)) |
| 221 | #define pte_write(pte) (!(pte_val(pte) & L_PTE_RDONLY)) | 225 | #define pte_write(pte) (pte_isclear((pte), L_PTE_RDONLY)) |
| 222 | #define pte_dirty(pte) (pte_val(pte) & L_PTE_DIRTY) | 226 | #define pte_dirty(pte) (pte_isset((pte), L_PTE_DIRTY)) |
| 223 | #define pte_young(pte) (pte_val(pte) & L_PTE_YOUNG) | 227 | #define pte_young(pte) (pte_isset((pte), L_PTE_YOUNG)) |
| 224 | #define pte_exec(pte) (!(pte_val(pte) & L_PTE_XN)) | 228 | #define pte_exec(pte) (pte_isclear((pte), L_PTE_XN)) |
| 225 | #define pte_special(pte) (0) | 229 | #define pte_special(pte) (0) |
| 226 | 230 | ||
| 227 | #define pte_valid_user(pte) \ | 231 | #define pte_valid_user(pte) \ |
| 228 | (pte_valid(pte) && (pte_val(pte) & L_PTE_USER) && pte_young(pte)) | 232 | (pte_valid(pte) && pte_isset((pte), L_PTE_USER) && pte_young(pte)) |
| 229 | 233 | ||
| 230 | #if __LINUX_ARM_ARCH__ < 6 | 234 | #if __LINUX_ARM_ARCH__ < 6 |
| 231 | static inline void __sync_icache_dcache(pte_t pteval) | 235 | static inline void __sync_icache_dcache(pte_t pteval) |
