linux/arch/mips/mm
Maciej W. Rozycki 9f048fa487 MIPS: mm: Prevent a TLB shutdown on initial uniquification
Depending on the particular CPU implementation a TLB shutdown may occur
if multiple matching entries are detected upon the execution of a TLBP
or the TLBWI/TLBWR instructions.  Given that we don't know what entries
we have been handed we need to be very careful with the initial TLB
setup and avoid all these instructions.

Therefore read all the TLB entries one by one with the TLBR instruction,
bypassing the content addressing logic, and truncate any large pages in
place so as to avoid a case in the second step where an incoming entry
for a large page at a lower address overlaps with a replacement entry
chosen at another index.  Then preinitialize the TLB using addresses
outside our usual unique range and avoiding clashes with any entries
received, before making the usual call to local_flush_tlb_all().

This fixes (at least) R4x00 cores if TLBP hits multiple matching TLB
entries (SGI IP22 PROM for examples sets up all TLBs to the same virtual
address).

Signed-off-by: Maciej W. Rozycki <macro@orcam.me.uk>
Fixes: 35ad7e1815 ("MIPS: mm: tlb-r4k: Uniquify TLB entries on init")
Cc: stable@vger.kernel.org
Reviewed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Tested-by: Jiaxun Yang <jiaxun.yang@flygoat.com> # Boston I6400, M5150 sim
Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
History 2025-11-21 13:23:21 +01:00
..
c-octeon.c MIPS: c-octeon: Provide alternative SMP cache flush function 2023-04-05 09:45:09 +02:00
c-r3k.c MIPS: mm: Remove local_cache_flush_page 2023-04-05 10:08:53 +02:00
c-r4k.c Just cleanups and fixes 2024-01-17 11:20:50 -08:00
cache.c mips: mm: convert __flush_dcache_pages() to __flush_dcache_folio_pages() 2025-09-21 14:22:06 -07:00
cerr-sb1.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
cex-gen.S MIPS: Fix typos 2024-01-08 10:39:12 +01:00
cex-oct.S MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
cex-sb1.S treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
context.c MIPS: mm: Use the bitmap API to allocate bitmaps 2022-07-11 10:28:12 +02:00
dma-noncoherent.c dma-mapping: Simplify arch_setup_dma_ops() 2024-04-26 12:07:28 +02:00
extable.c Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
fault.c mips: module: rename MODULE_START to MODULES_VADDR 2024-05-14 00:31:43 -07:00
highmem.c mips/mm/highmem: Switch to generic kmap atomic 2020-11-06 23:14:56 +01:00
hugetlbpage.c mm/treewide: remove pXd_huge() 2024-04-25 20:55:47 -07:00
init.c arch, mm: make releasing of memory to page allocator more explicit 2025-03-17 22:06:53 -07:00
ioremap.c mm/ioremap: pass pgprot_t to ioremap_prot() instead of unsigned long 2025-03-16 22:06:23 -07:00
ioremap64.c mm/ioremap: pass pgprot_t to ioremap_prot() instead of unsigned long 2025-03-16 22:06:23 -07:00
maccess.c MIPS: uaccess: Added __get/__put_kernel_nofault 2021-04-06 14:36:56 +02:00
Makefile MIPS: Remove TX39XX support 2022-03-01 10:07:22 +01:00
mmap.c mm: make arch_get_unmapped_area() take vm_flags by default 2024-09-09 16:39:13 -07:00
page-funcs.S mips: replace #include <asm/export.h> with #include <linux/export.h> 2023-08-15 10:22:23 +02:00
page.c MIPS: page: Use GPR number macros 2024-02-20 12:41:52 +01:00
pgtable-32.c arch: remove mk_pmd() 2025-05-11 17:48:04 -07:00
pgtable-64.c arch: remove mk_pmd() 2025-05-11 17:48:04 -07:00
pgtable.c asm-generic: pgalloc: provide generic __pgd_{alloc,free} 2025-01-25 20:22:24 -08:00
physaddr.c MIPS: Don't use %pK through printk 2025-07-28 09:58:49 +02:00
sc-debugfs.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
sc-ip22.c mm: don't include asm/pgtable.h if linux/mm.h is already included 2020-06-09 09:39:13 -07:00
sc-mips.c mips: fix Section mismatch in reference 2020-12-14 16:39:42 +01:00
sc-r5k.c mm: don't include asm/pgtable.h if linux/mm.h is already included 2020-06-09 09:39:13 -07:00
sc-rm7k.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
tlb-funcs.S mips: replace #include <asm/export.h> with #include <linux/export.h> 2023-08-15 10:22:23 +02:00
tlb-r3k.c Just cleanups and fixes 2024-01-17 11:20:50 -08:00
tlb-r4k.c MIPS: mm: Prevent a TLB shutdown on initial uniquification 2025-11-21 13:23:21 +01:00
tlbex-fault.S MIPS: Add DWARF unwinding to assembly 2017-09-06 11:01:52 +02:00
tlbex.c MIPS: tlbex: Use GPR number macros 2024-02-20 12:41:52 +01:00
uasm-micromips.c mips: bpf: implement jitting of BPF_ALU | BPF_ARSH | BPF_X 2018-12-07 13:30:48 -08:00
uasm-mips.c mips, uasm: Enable muhu opcode for MIPS R6 2021-10-06 12:28:02 -07:00
uasm.c mips, uasm: Enable muhu opcode for MIPS R6 2021-10-06 12:28:02 -07:00