diff options
author | Nicholas Piggin <npiggin@gmail.com> | 2018-08-23 18:47:09 +1000 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2018-08-23 11:55:58 -0700 |
commit | fd1102f0aadec7d18792b132e1d224290b2aecca (patch) | |
tree | 7a30bb6de0aae74f2a1248016778d4063785d2ec /mm | |
parent | d86564a2f085b79ec046a5cba90188e612352806 (diff) | |
download | linux-fd1102f0aadec7d18792b132e1d224290b2aecca.tar.gz linux-fd1102f0aadec7d18792b132e1d224290b2aecca.tar.bz2 linux-fd1102f0aadec7d18792b132e1d224290b2aecca.zip |
mm: mmu_notifier fix for tlb_end_vma
The generic tlb_end_vma does not call invalidate_range mmu notifier, and
it resets resets the mmu_gather range, which means the notifier won't be
called on part of the range in case of an unmap that spans multiple
vmas.
ARM64 seems to be the only arch I could see that has notifiers and uses
the generic tlb_end_vma. I have not actually tested it.
[ Catalin and Will point out that ARM64 currently only uses the
notifiers for KVM, which doesn't use the ->invalidate_range()
callback right now, so it's a bug, but one that happens to
not affect them. So not necessary for stable. - Linus ]
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Acked-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm')
-rw-r--r-- | mm/memory.c | 10 |
1 files changed, 0 insertions, 10 deletions
diff --git a/mm/memory.c b/mm/memory.c index 8b3442979855..3ff4394a2e1b 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -238,16 +238,6 @@ void arch_tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm, __tlb_reset_range(tlb); } -static void tlb_flush_mmu_tlbonly(struct mmu_gather *tlb) -{ - if (!tlb->end) - return; - - tlb_flush(tlb); - mmu_notifier_invalidate_range(tlb->mm, tlb->start, tlb->end); - __tlb_reset_range(tlb); -} - static void tlb_flush_mmu_free(struct mmu_gather *tlb) { struct mmu_gather_batch *batch; |