diff options
author | Christophe Leroy <christophe.leroy@c-s.fr> | 2018-01-23 14:22:50 +0100 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2018-01-27 20:24:44 +1100 |
commit | 5c8136fa1af7c0e9b4aec89cf2832f6e5197ce32 (patch) | |
tree | a8aadf6699651688193f374df647081770fbccc7 /arch/powerpc/mm | |
parent | fc5f622163637308a3d520a315527481cff023f5 (diff) | |
download | op-kernel-dev-5c8136fa1af7c0e9b4aec89cf2832f6e5197ce32.zip op-kernel-dev-5c8136fa1af7c0e9b4aec89cf2832f6e5197ce32.tar.gz |
powerpc/mm/nohash: do not flush the entire mm when range is a single page
Most of the time, flush_tlb_range() is called on single pages.
At the time being, flush_tlb_range() inconditionnaly calls
flush_tlb_mm() which flushes at least the entire PID pages and on
older CPUs like 4xx or 8xx it flushes the entire TLB table.
This patch calls flush_tlb_page() instead of flush_tlb_mm() when
the range is a single page.
Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'arch/powerpc/mm')
-rw-r--r-- | arch/powerpc/mm/tlb_nohash.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/arch/powerpc/mm/tlb_nohash.c b/arch/powerpc/mm/tlb_nohash.c index bfc4a08..15fe5f0 100644 --- a/arch/powerpc/mm/tlb_nohash.c +++ b/arch/powerpc/mm/tlb_nohash.c @@ -388,7 +388,10 @@ void flush_tlb_range(struct vm_area_struct *vma, unsigned long start, unsigned long end) { - flush_tlb_mm(vma->vm_mm); + if (end - start == PAGE_SIZE && !(start & ~PAGE_MASK)) + flush_tlb_page(vma, start); + else + flush_tlb_mm(vma->vm_mm); } EXPORT_SYMBOL(flush_tlb_range); |