arch/tlb: Clean up simple architectures
authorPeter Zijlstra <peterz@infradead.org>
Tue, 4 Sep 2018 15:04:07 +0000 (17:04 +0200)
committerIngo Molnar <mingo@kernel.org>
Wed, 3 Apr 2019 08:32:54 +0000 (10:32 +0200)
commit6137fed0823247e32306bde2b48cac627c24f894
tree73fe1d4bac3022a68e12f0798b1f21d9b4af6d5f
parent7bb8709d6ad3ceeb5010a98b0d7eb11db8836da1
arch/tlb: Clean up simple architectures

For the architectures that do not implement their own tlb_flush() but
do already use the generic mmu_gather, there are two options:

 1) the platform has an efficient flush_tlb_range() and
    asm-generic/tlb.h doesn't need any overrides at all.

 2) the platform lacks an efficient flush_tlb_range() and
    we select MMU_GATHER_NO_RANGE to minimize full invalidates.

Convert all 'simple' architectures to one of these two forms.

alpha:     has no range invalidate -> 2
arc:     already used flush_tlb_range() -> 1
c6x:     has no range invalidate -> 2
hexagon:    has an efficient flush_tlb_range() -> 1
            (flush_tlb_mm() is in fact a full range invalidate,
     so no need to shoot down everything)
m68k:     has inefficient flush_tlb_range() -> 2
microblaze: has no flush_tlb_range() -> 2
mips:     has efficient flush_tlb_range() -> 1
    (even though it currently seems to use flush_tlb_mm())
nds32:     already uses flush_tlb_range() -> 1
nios2:     has inefficient flush_tlb_range() -> 2
    (no limit on range iteration)
openrisc:   has inefficient flush_tlb_range() -> 2
    (no limit on range iteration)
parisc:     already uses flush_tlb_range() -> 1
sparc32:    already uses flush_tlb_range() -> 1
unicore32:  has inefficient flush_tlb_range() -> 2
    (no limit on range iteration)
xtensa:     has efficient flush_tlb_range() -> 1

Note this also fixes a bug in the existing code for a number
platforms. Those platforms that did:

  tlb_end_vma() -> if (!full_mm) flush_tlb_*()
  tlb_flush -> if (full_mm) flush_tlb_mm()

missed the case of shift_arg_pages(), which doesn't have @fullmm set,
nor calls into tlb_*vma(), but still frees page-tables and thus needs
an invalidate. The new code handles this by detecting a non-empty
range, and either issuing the matching range invalidate or a full
invalidate, depending on the capabilities.

No change in behavior intended.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: David S. Miller <davem@davemloft.net>
Cc: Greentime Hu <green.hu@gmail.com>
Cc: Guan Xuetao <gxt@pku.edu.cn>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Helge Deller <deller@gmx.de>
Cc: Jonas Bonn <jonas@southpole.se>
Cc: Ley Foon Tan <lftan@altera.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Mark Salter <msalter@redhat.com>
Cc: Max Filippov <jcmvbkbc@gmail.com>
Cc: Michal Simek <monstr@monstr.eu>
Cc: Nick Piggin <npiggin@gmail.com>
Cc: Paul Burton <paul.burton@mips.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Richard Henderson <rth@twiddle.net>
Cc: Richard Kuo <rkuo@codeaurora.org>
Cc: Rik van Riel <riel@surriel.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Vineet Gupta <vgupta@synopsys.com>
Cc: Will Deacon <will.deacon@arm.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
22 files changed:
arch/alpha/Kconfig
arch/alpha/include/asm/tlb.h
arch/arc/include/asm/tlb.h
arch/c6x/Kconfig
arch/c6x/include/asm/tlb.h
arch/h8300/include/asm/tlb.h
arch/hexagon/include/asm/tlb.h
arch/m68k/Kconfig
arch/m68k/include/asm/tlb.h
arch/microblaze/Kconfig
arch/microblaze/include/asm/tlb.h
arch/mips/include/asm/tlb.h
arch/nds32/include/asm/tlb.h
arch/nios2/Kconfig
arch/nios2/include/asm/tlb.h
arch/openrisc/Kconfig
arch/openrisc/include/asm/tlb.h
arch/parisc/include/asm/tlb.h
arch/sparc/include/asm/tlb_32.h
arch/unicore32/Kconfig
arch/unicore32/include/asm/tlb.h
arch/xtensa/include/asm/tlb.h