|
@@ -224,6 +224,8 @@ static inline pte_t pte_mkspecial(pte_t pte)
|
|
|
#define __HAVE_ARCH_PMD_WRITE
|
|
|
#define pmd_write(pmd) (pmd_isclear((pmd), L_PMD_SECT_RDONLY))
|
|
|
#define pmd_dirty(pmd) (pmd_isset((pmd), L_PMD_SECT_DIRTY))
|
|
|
+#define pud_page(pud) pmd_page(__pmd(pud_val(pud)))
|
|
|
+#define pud_write(pud) pmd_write(__pmd(pud_val(pud)))
|
|
|
|
|
|
#define pmd_hugewillfault(pmd) (!pmd_young(pmd) || !pmd_write(pmd))
|
|
|
#define pmd_thp_or_huge(pmd) (pmd_huge(pmd) || pmd_trans_huge(pmd))
|
|
@@ -231,6 +233,12 @@ static inline pte_t pte_mkspecial(pte_t pte)
|
|
|
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
|
|
#define pmd_trans_huge(pmd) (pmd_val(pmd) && !pmd_table(pmd))
|
|
|
#define pmd_trans_splitting(pmd) (pmd_isset((pmd), L_PMD_SECT_SPLITTING))
|
|
|
+
|
|
|
+#ifdef CONFIG_HAVE_RCU_TABLE_FREE
|
|
|
+#define __HAVE_ARCH_PMDP_SPLITTING_FLUSH
|
|
|
+void pmdp_splitting_flush(struct vm_area_struct *vma, unsigned long address,
|
|
|
+ pmd_t *pmdp);
|
|
|
+#endif
|
|
|
#endif
|
|
|
|
|
|
#define PMD_BIT_FUNC(fn,op) \
|