linux-kernel-test/arch/mips
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
..
alchemy Merge branch 'timers-clocksource-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2011-05-19 17:44:13 -07:00
ar7 MIPS: AR7: Replace __attribute__((__packed__)) with __packed 2011-07-25 17:23:20 +01:00
ath79 USB: ohci: add bus glue for the Atheros AR71XX/AR7240 SoCs 2011-04-13 16:58:19 -07:00
bcm47xx MIPS: BCM47xx: Extend the filling of SPROM from NVRAM 2011-05-19 09:55:47 +01:00
bcm63xx SSB: Change fallback sprom to callback mechanism. 2011-05-19 09:55:47 +01:00
boot MIPS: Alchemy: Rewrite UART setup and constants. 2011-05-19 09:55:45 +01:00
cavium-octeon Merge git://git.infradead.org/mtd-2.6 2011-05-27 20:06:53 -07:00
cobalt MIPS: Move Cobalt Makefile parts to their own Platform file 2010-08-05 13:25:47 +01:00
configs rtc: fix build warnings in defconfigs 2011-06-15 20:04:02 -07:00
dec MIPS: Convert the irq functions to the new names 2011-03-29 14:48:07 +02:00
emma MIPS: Convert the irq functions to the new names 2011-03-29 14:48:07 +02:00
fw Merge branch 'master' into for-next 2011-04-26 10:22:59 +02:00
include/asm MIPS: Add uasm UASM_i_SRL_SAFE macro. 2011-07-26 06:47:36 +01:00
jazz MIPS: Jazz: Fix GCC 4.6.0 build error 2011-05-10 18:15:23 +01:00
jz4740 Merge branch 'timers-clocksource-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2011-05-19 17:44:13 -07:00
kernel MIPS: Remove pointless return statement from empty void functions. 2011-07-25 17:26:55 +01:00
lantiq MIPS: Lantiq: Add missing clk_enable and clk_disable functions. 2011-07-20 23:12:12 +01:00
lasat MIPS: Convert the irq functions to the new names 2011-03-29 14:48:07 +02:00
lib MIPS: Kconfig and Makefile update for Netlogic XLR/XLS 2011-05-19 09:55:40 +01:00
loongson MIPS: Remove pointless return statement from empty void functions. 2011-07-25 17:26:55 +01:00
math-emu Fix common misspellings 2011-03-31 11:26:23 -03:00
mipssim MIPS: MIPSsim: Fix uniprocessor build. 2011-07-20 23:12:11 +01:00
mm MIPS: Close races in TLB modify handlers. 2011-07-26 06:47:47 +01:00
mti-malta MIPS: Malta: Fix crash in SMP kernel on non-CMP systems. 2011-07-20 23:12:10 +01:00
netlogic MIPS: Netlogic: SMP fixes for XLR/XLS platform code. 2011-07-20 23:12:11 +01:00
nxp/pnx8550/common MIPS: Remove pointless return statement from empty void functions. 2011-07-25 17:26:55 +01:00
oprofile mips: change to new flag variable 2011-03-17 14:02:56 +01:00
pci MIPS: NILE4: Remove useless inclusion of GT64120 header. 2011-07-20 23:12:09 +01:00
pmc-sierra MIPS: Malta: Fix crash in SMP kernel on non-CMP systems. 2011-07-20 23:12:10 +01:00
pnx833x Fix common misspellings 2011-03-31 11:26:23 -03:00
pnx8550 MIPS: Remove pointless return statement from empty void functions. 2011-07-25 17:26:55 +01:00
power MIPS: Hibernation: Fixes for PAGE_SIZE >= 64kb 2011-05-10 18:15:26 +01:00
powertv MIPS: Convert the irq functions to the new names 2011-03-29 14:48:07 +02:00
rb532 MIPS: RB532: Use hex_to_bin() 2011-07-25 17:26:56 +01:00
sgi-ip22 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2011-05-23 09:12:26 -07:00
sgi-ip27 Merge branch 'timers-clocksource-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2011-05-19 17:44:13 -07:00
sgi-ip32 MIPS: Convert the irq functions to the new names 2011-03-29 14:48:07 +02:00
sibyte MIPS: SB1250: Restore dropped irq_mask function 2011-07-20 23:12:11 +01:00
sni MIPS: SNI: Fix GCC 4.6.0 build error 2011-05-10 18:15:23 +01:00
txx9 Merge git://git.infradead.org/mtd-2.6 2011-05-27 20:06:53 -07:00
vr41xx mips: vr41xx: Use irdq_irq_disabled() 2011-03-29 14:48:07 +02:00
wrppmc MIPS: WRPPMC: Migrate to new platform makefile style. 2010-08-05 13:25:51 +01:00
Kbuild MIPS: Repair Kbuild make clean breakage. 2010-10-19 18:32:39 +01:00
Kbuild.platforms MIPS: XLR, XLS: Move makefile bits to were they belong. 2011-07-20 23:12:11 +01:00
Kconfig arch: remove CONFIG_GENERIC_FIND_{NEXT_BIT,BIT_LE,LAST_BIT} 2011-05-26 17:12:38 -07:00
Kconfig.debug lib: consolidate DEBUG_STACK_USAGE option 2011-05-25 08:39:54 -07:00
Makefile MIPS: XLR, XLS: Move makefile bits to were they belong. 2011-07-20 23:12:11 +01:00