Message ID | b30b2eae6960502eaf0d9e36c60820b839693c33.1580542939.git.christophe.leroy@c-s.fr (mailing list archive) |
---|---|
State | Accepted |
Commit | 030e347430957f6f7f29db9099368f8b86c0bf76 |
Headers | show |
Series | [v2] powerpc/32s: Don't flush all TLBs when flushing one page | expand |
Context | Check | Description |
---|---|---|
snowpatch_ozlabs/apply_patch | success | Successfully applied on branch powerpc/merge (492a2f9203423062e77c862dd2256dc0e186690a) |
snowpatch_ozlabs/build-ppc64le | success | Build succeeded |
snowpatch_ozlabs/build-ppc64be | success | Build succeeded |
snowpatch_ozlabs/build-ppc64e | success | Build succeeded |
snowpatch_ozlabs/build-pmac32 | success | Build succeeded |
snowpatch_ozlabs/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 16 lines checked |
snowpatch_ozlabs/needsstable | success | Patch has no Fixes tags |
Le 01/02/2020 à 09:04, Christophe Leroy a écrit : > When flushing any memory range, the flushing function > flushes all TLBs. > > When (start) and (end - 1) are in the same memory page, > flush that page instead. > > Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr> Reviewed-by: Segher Boessenkool <segher@kernel.crashing.org> > --- > v2: Reworked the test as the previous one was always false (end - start was PAGE_SIZE - 1 for a single page) > --- > arch/powerpc/mm/book3s32/tlb.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/arch/powerpc/mm/book3s32/tlb.c b/arch/powerpc/mm/book3s32/tlb.c > index 2fcd321040ff..724c0490fb17 100644 > --- a/arch/powerpc/mm/book3s32/tlb.c > +++ b/arch/powerpc/mm/book3s32/tlb.c > @@ -79,11 +79,14 @@ static void flush_range(struct mm_struct *mm, unsigned long start, > int count; > unsigned int ctx = mm->context.id; > > + start &= PAGE_MASK; > if (!Hash) { > - _tlbia(); > + if (end - start <= PAGE_SIZE) > + _tlbie(start); > + else > + _tlbia(); > return; > } > - start &= PAGE_MASK; > if (start >= end) > return; > end = (end - 1) | ~PAGE_MASK; >
On Sat, 2020-02-01 at 08:04:31 UTC, Christophe Leroy wrote: > When flushing any memory range, the flushing function > flushes all TLBs. > > When (start) and (end - 1) are in the same memory page, > flush that page instead. > > Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr> Applied to powerpc next, thanks. https://git.kernel.org/powerpc/c/030e347430957f6f7f29db9099368f8b86c0bf76 cheers
diff --git a/arch/powerpc/mm/book3s32/tlb.c b/arch/powerpc/mm/book3s32/tlb.c index 2fcd321040ff..724c0490fb17 100644 --- a/arch/powerpc/mm/book3s32/tlb.c +++ b/arch/powerpc/mm/book3s32/tlb.c @@ -79,11 +79,14 @@ static void flush_range(struct mm_struct *mm, unsigned long start, int count; unsigned int ctx = mm->context.id; + start &= PAGE_MASK; if (!Hash) { - _tlbia(); + if (end - start <= PAGE_SIZE) + _tlbie(start); + else + _tlbia(); return; } - start &= PAGE_MASK; if (start >= end) return; end = (end - 1) | ~PAGE_MASK;
When flushing any memory range, the flushing function flushes all TLBs. When (start) and (end - 1) are in the same memory page, flush that page instead. Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr> --- v2: Reworked the test as the previous one was always false (end - start was PAGE_SIZE - 1 for a single page) --- arch/powerpc/mm/book3s32/tlb.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)