diff options
Diffstat (limited to 'arch/arm/include/asm/pgtable-3level.h')
-rw-r--r-- | arch/arm/include/asm/pgtable-3level.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/arch/arm/include/asm/pgtable-3level.h b/arch/arm/include/asm/pgtable-3level.h index 06e0bc0f8b00..a31ecdad4b59 100644 --- a/arch/arm/include/asm/pgtable-3level.h +++ b/arch/arm/include/asm/pgtable-3level.h | |||
@@ -213,10 +213,19 @@ static inline pmd_t *pmd_offset(pud_t *pud, unsigned long addr) | |||
213 | #define pmd_isclear(pmd, val) (!(pmd_val(pmd) & (val))) | 213 | #define pmd_isclear(pmd, val) (!(pmd_val(pmd) & (val))) |
214 | 214 | ||
215 | #define pmd_young(pmd) (pmd_isset((pmd), PMD_SECT_AF)) | 215 | #define pmd_young(pmd) (pmd_isset((pmd), PMD_SECT_AF)) |
216 | #define pte_special(pte) (pte_isset((pte), L_PTE_SPECIAL)) | ||
217 | static inline pte_t pte_mkspecial(pte_t pte) | ||
218 | { | ||
219 | pte_val(pte) |= L_PTE_SPECIAL; | ||
220 | return pte; | ||
221 | } | ||
222 | #define __HAVE_ARCH_PTE_SPECIAL | ||
216 | 223 | ||
217 | #define __HAVE_ARCH_PMD_WRITE | 224 | #define __HAVE_ARCH_PMD_WRITE |
218 | #define pmd_write(pmd) (pmd_isclear((pmd), L_PMD_SECT_RDONLY)) | 225 | #define pmd_write(pmd) (pmd_isclear((pmd), L_PMD_SECT_RDONLY)) |
219 | #define pmd_dirty(pmd) (pmd_isset((pmd), L_PMD_SECT_DIRTY)) | 226 | #define pmd_dirty(pmd) (pmd_isset((pmd), L_PMD_SECT_DIRTY)) |
227 | #define pud_page(pud) pmd_page(__pmd(pud_val(pud))) | ||
228 | #define pud_write(pud) pmd_write(__pmd(pud_val(pud))) | ||
220 | 229 | ||
221 | #define pmd_hugewillfault(pmd) (!pmd_young(pmd) || !pmd_write(pmd)) | 230 | #define pmd_hugewillfault(pmd) (!pmd_young(pmd) || !pmd_write(pmd)) |
222 | #define pmd_thp_or_huge(pmd) (pmd_huge(pmd) || pmd_trans_huge(pmd)) | 231 | #define pmd_thp_or_huge(pmd) (pmd_huge(pmd) || pmd_trans_huge(pmd)) |
@@ -224,6 +233,12 @@ static inline pmd_t *pmd_offset(pud_t *pud, unsigned long addr) | |||
224 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE | 233 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE |
225 | #define pmd_trans_huge(pmd) (pmd_val(pmd) && !pmd_table(pmd)) | 234 | #define pmd_trans_huge(pmd) (pmd_val(pmd) && !pmd_table(pmd)) |
226 | #define pmd_trans_splitting(pmd) (pmd_isset((pmd), L_PMD_SECT_SPLITTING)) | 235 | #define pmd_trans_splitting(pmd) (pmd_isset((pmd), L_PMD_SECT_SPLITTING)) |
236 | |||
237 | #ifdef CONFIG_HAVE_RCU_TABLE_FREE | ||
238 | #define __HAVE_ARCH_PMDP_SPLITTING_FLUSH | ||
239 | void pmdp_splitting_flush(struct vm_area_struct *vma, unsigned long address, | ||
240 | pmd_t *pmdp); | ||
241 | #endif | ||
227 | #endif | 242 | #endif |
228 | 243 | ||
229 | #define PMD_BIT_FUNC(fn,op) \ | 244 | #define PMD_BIT_FUNC(fn,op) \ |