__pte;                                                          \
 })
 
+#define pmdp_clear_flush_notify(__vma, __address, __pmdp)              \
+({                                                                     \
+       pmd_t __pmd;                                                    \
+       struct vm_area_struct *___vma = __vma;                          \
+       unsigned long ___address = __address;                           \
+       VM_BUG_ON(__address & ~HPAGE_PMD_MASK);                         \
+       mmu_notifier_invalidate_range_start(___vma->vm_mm, ___address,  \
+                                           (__address)+HPAGE_PMD_SIZE);\
+       __pmd = pmdp_clear_flush(___vma, ___address, __pmdp);           \
+       mmu_notifier_invalidate_range_end(___vma->vm_mm, ___address,    \
+                                         (__address)+HPAGE_PMD_SIZE);  \
+       __pmd;                                                          \
+})
+
+#define pmdp_splitting_flush_notify(__vma, __address, __pmdp)          \
+({                                                                     \
+       struct vm_area_struct *___vma = __vma;                          \
+       unsigned long ___address = __address;                           \
+       VM_BUG_ON(__address & ~HPAGE_PMD_MASK);                         \
+       mmu_notifier_invalidate_range_start(___vma->vm_mm, ___address,  \
+                                           (__address)+HPAGE_PMD_SIZE);\
+       pmdp_splitting_flush(___vma, ___address, __pmdp);               \
+       mmu_notifier_invalidate_range_end(___vma->vm_mm, ___address,    \
+                                         (__address)+HPAGE_PMD_SIZE);  \
+})
+
 #define ptep_clear_flush_young_notify(__vma, __address, __ptep)                \
 ({                                                                     \
        int __young;                                                    \
        __young;                                                        \
 })
 
+#define pmdp_clear_flush_young_notify(__vma, __address, __pmdp)                \
+({                                                                     \
+       int __young;                                                    \
+       struct vm_area_struct *___vma = __vma;                          \
+       unsigned long ___address = __address;                           \
+       __young = pmdp_clear_flush_young(___vma, ___address, __pmdp);   \
+       __young |= mmu_notifier_clear_flush_young(___vma->vm_mm,        \
+                                                 ___address);          \
+       __young;                                                        \
+})
+
 #define set_pte_at_notify(__mm, __address, __ptep, __pte)              \
 ({                                                                     \
        struct mm_struct *___mm = __mm;                                 \
 }
 
 #define ptep_clear_flush_young_notify ptep_clear_flush_young
+#define pmdp_clear_flush_young_notify pmdp_clear_flush_young
 #define ptep_clear_flush_notify ptep_clear_flush
+#define pmdp_clear_flush_notify pmdp_clear_flush
+#define pmdp_splitting_flush_notify pmdp_splitting_flush
 #define set_pte_at_notify set_pte_at
 
 #endif /* CONFIG_MMU_NOTIFIER */