linux/arch/mips/mm
David Daney bf28607fbe MIPS: Close races in TLB modify handlers.
Page table entries are made invalid by writing a zero into the the PTE
slot in a page table.  This creates a race condition with the TLB
modify handlers when they are updating the PTE.

CPU0                              CPU1

Test for _PAGE_PRESENT
.                                 set to not _PAGE_PRESENT (zero)
Set to _PAGE_VALID

So now the page not present value (zero) is suddenly valid and user
space programs have access to physical page zero.

We close the race by putting the test for _PAGE_PRESENT and setting of
_PAGE_VALID into an atomic LL/SC section.  This requires more registers
than just K0 and K1 in the handlers, so we need to save some registers
to a save area and then restore them when we are done.

The save area is an array of cacheline aligned structures that should
not suffer cache line bouncing as they are CPU private.

[ralf@linux-mips.org: Fix !defined(CONFIG_MIPS_PGD_C0_CONTEXT) build error.]

Signed-off-by: David Daney <david.daney@cavium.com>
To: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/2577/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
2011-07-26 06:47:47 +01:00
..
c-octeon.c MIPS: Octeon: Handle Octeon II caches. 2010-10-29 19:08:36 +01:00
c-r3k.c update David Miller's old email address 2011-04-06 06:19:38 -07:00
c-r4k.c MIPS: Add SYNC after cacheflush 2011-07-25 17:26:53 +01:00
c-tx39.c update David Miller's old email address 2011-04-06 06:19:38 -07:00
cache.c MIPS: Fix __vmalloc() etc. on MIPS for non-GPL modules 2010-04-12 17:26:21 +01:00
cerr-sb1.c MIPS: Sibyte: Use hweight8 instead of counting bits 2009-12-17 01:57:16 +00:00
cex-gen.S
cex-oct.S MIPS: Add Cavium OCTEON processor support files to arch/mips/cavium-octeon. 2009-01-11 09:57:21 +00:00
cex-sb1.S Fix common misspellings 2011-03-31 11:26:23 -03:00
dma-default.c MIPS: HIGHMEM DMA on noncoherent MIPS32 processors 2011-07-25 17:26:52 +01:00
extable.c MIPS: Eleminate filenames from comments 2009-08-03 17:52:40 +01:00
fault.c MIPS: add support for software performance events 2010-10-29 19:08:48 +01:00
highmem.c mm: fix race in kunmap_atomic() 2010-10-27 18:03:05 -07:00
hugetlbpage.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
init.c MIPS: Limit fixrange_init() to the FIXMAP region 2011-07-25 17:26:54 +01:00
ioremap.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
Makefile MIPS: Move arch_get_unmapped_area and gang to new file. 2011-05-19 09:55:49 +01:00
mmap.c MIPS: topdown mmap support 2011-07-25 17:26:51 +01:00
page.c MIPS: Move arch/mips/mm/uasm.h to arch/mips/include/asm/uasm.h 2010-02-27 12:53:19 +01:00
pgtable-32.c MIPS: Limit fixrange_init() to the FIXMAP region 2011-07-25 17:26:54 +01:00
pgtable-64.c MIPS: Limit fixrange_init() to the FIXMAP region 2011-07-25 17:26:54 +01:00
sc-ip22.c update David Miller's old email address 2011-04-06 06:19:38 -07:00
sc-mips.c MIPS: Fix build errors in sc-mips.c 2010-12-17 19:44:35 +00:00
sc-r5k.c update David Miller's old email address 2011-04-06 06:19:38 -07:00
sc-rm7k.c MIPS: RM7000: Symbol should be static 2010-10-04 18:33:54 +01:00
tlb-r3k.c update David Miller's old email address 2011-04-06 06:19:38 -07:00
tlb-r4k.c update David Miller's old email address 2011-04-06 06:19:38 -07:00
tlb-r8k.c update David Miller's old email address 2011-04-06 06:19:38 -07:00
tlbex-fault.S
tlbex.c MIPS: Close races in TLB modify handlers. 2011-07-26 06:47:47 +01:00
uasm.c MIPS: Use WARN() in uasm for better diagnostics. 2011-01-18 19:30:24 +01:00