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; \
|
||||
})
|
||||
|
||||
#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; \
|
||||
|
@ -254,6 +280,17 @@ static inline void mmu_notifier_mm_destroy(struct mm_struct *mm)
|
|||
__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; \
|
||||
|
@ -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 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 */
|
||||
|
|
Loading…
Reference in New Issue