thp: add pmd mmu_notifier helpers
Add mmu notifier helpers to handle pmd huge operations. Signed-off-by: Andrea Arcangeli <aarcange@redhat.com> Acked-by: Rik van Riel <riel@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
8ac1f8320a
commit
91a4ee2670
|
@ -243,6 +243,32 @@ static inline void mmu_notifier_mm_destroy(struct mm_struct *mm)
|
||||||
__pte; \
|
__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) \
|
#define ptep_clear_flush_young_notify(__vma, __address, __ptep) \
|
||||||
({ \
|
({ \
|
||||||
int __young; \
|
int __young; \
|
||||||
|
@ -254,6 +280,17 @@ static inline void mmu_notifier_mm_destroy(struct mm_struct *mm)
|
||||||
__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) \
|
#define set_pte_at_notify(__mm, __address, __ptep, __pte) \
|
||||||
({ \
|
({ \
|
||||||
struct mm_struct *___mm = __mm; \
|
struct mm_struct *___mm = __mm; \
|
||||||
|
@ -305,7 +342,10 @@ static inline void mmu_notifier_mm_destroy(struct mm_struct *mm)
|
||||||
}
|
}
|
||||||
|
|
||||||
#define ptep_clear_flush_young_notify ptep_clear_flush_young
|
#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 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
|
#define set_pte_at_notify set_pte_at
|
||||||
|
|
||||||
#endif /* CONFIG_MMU_NOTIFIER */
|
#endif /* CONFIG_MMU_NOTIFIER */
|
||||||
|
|
Loading…
Reference in New Issue