powerpc/64s/radix: Fix MADV_[FREE|DONTNEED] TLB flush miss problem with THP
authorNicholas Piggin <npiggin@gmail.com>
Fri, 15 Jun 2018 01:38:37 +0000 (11:38 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 19 Jun 2018 11:28:21 +0000 (21:28 +1000)
commit02390f66bd2362df114a0a0770d80ec33061f6d1
treeb9de0f001ff1e469303719a29ec156b06e3f3e23
parent69a8405999aa1c489de4b8d349468f0c2b83f093
powerpc/64s/radix: Fix MADV_[FREE|DONTNEED] TLB flush miss problem with THP

The patch 99baac21e4 ("mm: fix MADV_[FREE|DONTNEED] TLB flush miss
problem") added a force flush mode to the mmu_gather flush, which
unconditionally flushes the entire address range being invalidated
(even if actual ptes only covered a smaller range), to solve a problem
with concurrent threads invalidating the same PTEs causing them to
miss TLBs that need flushing.

This does not work with powerpc that invalidates mmu_gather batches
according to page size. Have powerpc flush all possible page sizes in
the range if it encounters this concurrency condition.

Patch 4647706ebe ("mm: always flush VMA ranges affected by
zap_page_range") does add a TLB flush for all page sizes on powerpc for
the zap_page_range case, but that is to be removed and replaced with
the mmu_gather flush to avoid redundant flushing. It is also thought to
not cover other obscure race conditions:

https://lkml.kernel.org/r/BD3A0EBE-ECF4-41D4-87FA-C755EA9AB6BD@gmail.com

Hash does not have a problem because it invalidates TLBs inside the
page table locks.

Reported-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/mm/tlb-radix.c