linux_dsm_epyc7002/arch/mips/include/asm
Lars Persson 4d46a67a3e MIPS: Fix race condition in lazy cache flushing.
The lazy cache flushing implemented in the MIPS kernel suffers from a
race condition that is exposed by do_set_pte() in mm/memory.c.

A pre-condition is a file-system that writes to the page from the CPU
in its readpage method and then calls flush_dcache_page(). One example
is ubifs. Another pre-condition is that the dcache flush is postponed
in __flush_dcache_page().

Upon a page fault for an executable mapping not existing in the
page-cache, the following will happen:
1. Write to the page
2. flush_dcache_page
3. flush_icache_page
4. set_pte_at
5. update_mmu_cache (commits the flush of a dcache-dirty page)

Between steps 4 and 5 another thread can hit the same page and it will
encounter a valid pte. Because the data still is in the L1 dcache the CPU
will fetch stale data from L2 into the icache and execute garbage.

This fix moves the commit of the cache flush to step 3 to close the
race window. It also reduces the amount of flushes on non-executable
mappings because we never enter __flush_dcache_page() for non-aliasing
CPUs.

Regressions can occur in drivers that mistakenly relies on the
flush_dcache_page() in get_user_pages() for DMA operations.

[ralf@linux-mips.org: Folded in patch 9346 to fix highmem issue.]

Signed-off-by: Lars Persson <larper@axis.com>
Cc: linux-mips@linux-mips.org
Cc: paul.burton@imgtec.com
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/9346/
Patchwork: https://patchwork.linux-mips.org/patch/9738/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
2015-03-25 13:48:00 +01:00
..
dec DEC: Document the R4k MB ASIC mini interrupt controller 2014-06-04 22:50:41 +02:00
emma
fw MIPS: ARC: Fix build error. 2015-01-19 13:09:52 +01:00
ip32
lasat
mach-ar7 Revert "MIPS: make CAC_ADDR and UNCAC_ADDR account for PHYS_OFFSET" 2013-07-01 15:10:58 +02:00
mach-ath25 MIPS: ath25: add AR2315 PCI host controller driver 2014-11-24 07:45:28 +01:00
mach-ath79 mips: delete non-required instances of include <linux/init.h> 2014-01-24 22:39:56 +01:00
mach-au1x00 MIPS: Replace use of phys_t with phys_addr_t. 2014-11-24 22:47:31 +01:00
mach-bcm47xx MIPS: BCM47XX: Clean up nvram header 2014-11-24 07:45:08 +01:00
mach-bcm63xx MIPS: Replace use of phys_t with phys_addr_t. 2014-11-24 22:47:31 +01:00
mach-bcm3384 MIPS: bcm3384: Initial commit of bcm3384 platform support 2014-11-24 07:45:13 +01:00
mach-cavium-octeon MIPS: OCTEON: More OCTEONIII support 2015-02-20 15:32:46 +01:00
mach-cobalt
mach-db1x00 MIPS: Alchemy: fold mach-db1xxx/db1x00 headers into board code 2014-03-26 23:09:21 +01:00
mach-dec MIPS: DECstation CPU feature overrides 2013-10-29 21:24:46 +01:00
mach-emma2rh
mach-generic MIPS: Replace use of phys_t with phys_addr_t. 2014-11-24 22:47:31 +01:00
mach-ip22 MIPS: IP22: This platform may come with either MIPS III or MIPS IV CPUs. 2014-05-23 15:10:59 +02:00
mach-ip27 MIPS: Remove unnecessary platform dma helper functions 2013-10-29 21:24:40 +01:00
mach-ip28 MIPS: IP28: Fix/clean spaces.h 2014-08-26 02:18:58 +02:00
mach-ip32 MIPS: Remove unnecessary platform dma helper functions 2013-10-29 21:24:40 +01:00
mach-jazz mips: delete non-required instances of include <linux/init.h> 2014-01-24 22:39:56 +01:00
mach-jz4740 mtd: nand: jz4740: Convert to GPIO descriptor API 2015-02-02 01:04:36 -08:00
mach-lantiq MIPS: lantiq: export soc type 2014-11-24 07:45:18 +01:00
mach-lasat
mach-loongson MIPS: Loongson: Improve LEFI firmware interface 2014-11-24 07:45:01 +01:00
mach-loongson1 MIPS: Loongson1B: Some fixes/updates for LS1B 2014-11-24 07:45:09 +01:00
mach-malta irqchip: mips-gic: Probe for number of external interrupts 2014-11-24 07:44:56 +01:00
mach-netlogic MIPS: NL: Fix nlm_xlp_defconfig build error 2014-08-26 02:18:55 +02:00
mach-paravirt MIPS: Add code for new system 'paravirt' 2014-06-02 12:34:20 +02:00
mach-pmcs-msp71xx MIPS: asm: Rename GCC_OFF12_ASM to GCC_OFF_SMALL_ASM 2015-02-17 15:37:21 +00:00
mach-pnx833x
mach-ralink MIPS: ralink: add mt7628an support 2014-11-24 07:45:24 +01:00
mach-rc32434
mach-rm
mach-sead3 irqchip: mips-gic: Probe for number of external interrupts 2014-11-24 07:44:56 +01:00
mach-sibyte
mach-tx39xx MIPS: Replace use of phys_t with phys_addr_t. 2014-11-24 22:47:31 +01:00
mach-tx49xx MIPS: Replace use of phys_t with phys_addr_t. 2014-11-24 22:47:31 +01:00
mach-vr41xx
mips-boards MIPS: Move gic.h to include/linux/irqchip/mips-gic.h 2014-11-24 07:44:59 +01:00
netlogic MIPS: Add MSI support for XLP9XX 2014-05-30 16:51:02 +02:00
octeon MIPS: OCTEON: Use correct CSR to soft reset 2015-03-25 13:47:59 +01:00
pci
sgi MIPS: IP22/IP28: Improve GIO support 2014-06-04 22:50:42 +02:00
sibyte
sn MIPS: IP27: Remove pfn_t. 2013-05-08 03:51:58 +02:00
txx9
vr41xx
xtalk MIPS: IP27: Fix build errors with CONFIG_PCI disabled. 2013-06-21 18:07:00 +02:00
abi.h mips: Use get_signal() signal_setup_done() 2014-08-06 13:03:08 +02:00
addrspace.h MIPS: Add NUMA support for Loongson-3 2014-07-30 21:46:19 +02:00
amon.h MIPS: APRP: Code formatting clean-ups. 2014-01-22 20:19:02 +01:00
arch_hweight.h
asm-eva.h MIPS: asm: Add wrappers for EVA/non-EVA instructions 2014-03-26 23:09:12 +01:00
asm-offsets.h
asm.h MIPS: Fix gigaton of warning building with microMIPS. 2014-03-31 18:17:12 +02:00
asmmacro-32.h MIPS: Fix build with binutils 2.24.51+ 2014-11-07 15:07:36 +01:00
asmmacro-64.h MIPS: Support for 64-bit FP with O32 binaries 2014-01-13 23:40:56 +01:00
asmmacro.h MIPS: kernel: r4k_switch: Add support for MIPS R6 2015-02-17 15:37:27 +00:00
atomic.h MIPS: asm: atomic: Update ISA constraints for MIPS R6 support 2015-02-17 15:37:22 +00:00
barrier.h arch: Add lightweight memory barriers dma_rmb() and dma_wmb() 2014-12-11 21:15:06 -05:00
bcache.h
bitops.h MIPS: asm: bitops: Update ISA constraints for MIPS R6 support 2015-02-17 15:37:22 +00:00
bmips.h MIPS: BMIPS: Let each platform customize the CPU1 IRQ mask 2014-11-24 07:45:11 +01:00
bootinfo.h MIPS: Replace use of phys_t with phys_addr_t. 2014-11-24 22:47:31 +01:00
branch.h MIPS: kernel: mips-r2-to-r6-emul: Add R2 emulator for MIPS R6 2015-02-17 15:37:37 +00:00
break.h
bug.h
bugs.h
cache.h
cacheflush.h MIPS: Fix race condition in lazy cache flushing. 2015-03-25 13:48:00 +01:00
cacheops.h MIPS: fix case mismatch in local_r4k_flush_icache_range() 2014-01-15 14:19:42 +07:00
cevt-r4k.h
checksum.h MIPS: Use generic checksum functions for MIPS R6 2015-02-17 15:37:19 +00:00
clkdev.h clk: Add common __clk_get(), __clk_put() implementations 2013-12-04 17:19:44 +01:00
clock.h MIPS: Remove declaration of obsolete arch_init_clk_ops() 2014-11-24 07:45:37 +01:00
cmp.h MIPS: SMP: Remove plat_smp_ops cpus_done method. 2014-05-27 11:06:42 +02:00
cmpxchg.h MIPS: asm: cmpxchg: Update ISA constraints for MIPS R6 support 2015-02-17 15:37:22 +00:00
compat-signal.h
compat.h Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2013-03-02 07:44:16 -08:00
compiler.h MIPS: Use the new "ZC" constraint for MIPS R6 2015-02-17 15:37:21 +00:00
cop2.h MIPS: Prevent compiler warning from cop2_{save,restore} 2014-10-23 19:58:13 +02:00
cpu-features.h MIPS: Add support for XPA. 2015-03-19 17:39:49 +01:00
cpu-info.h MIPS: HTW: Prevent accidental HTW start due to nested htw_{start, stop} 2015-02-16 10:55:26 +01:00
cpu-type.h MIPS: Add cases for CPU_QEMU_GENERIC 2015-02-16 10:01:24 +00:00
cpu.h MIPS: Add support for XPA. 2015-03-19 17:39:49 +01:00
debug.h
delay.h
device.h
div64.h
dma-coherence.h MIPS: improve checks for noncoherent DMA 2014-01-22 20:43:10 +01:00
dma-mapping.h MIPS: Loongson: Add swiotlb to support All-Memory DMA 2014-03-31 18:17:12 +02:00
dma.h
ds1287.h
dsp.h
edac.h MIPS: asm: Rename GCC_OFF12_ASM to GCC_OFF_SMALL_ASM 2015-02-17 15:37:21 +00:00
elf.h MIPS: kernel: elf: Improve the overall ABI and FPU mode checks 2015-02-17 15:37:39 +00:00
errno.h
eva.h MIPS: EVA: Add new EVA header 2014-08-26 02:18:56 +02:00
exec.h
fb.h
fixmap.h MIPS: MT: Remove SMTC support 2014-05-24 00:07:01 +02:00
floppy.h
fpregdef.h MIPS: Fix build with binutils 2.24.51+ 2014-11-07 15:07:36 +01:00
fpu_emulator.h MIPS: Replace __get_cpu_var uses in FPU emulator. 2014-08-26 13:45:51 -04:00
fpu.h Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2015-02-21 19:41:38 -08:00
ftrace.h MIPS: ftrace: Fix a microMIPS build problem 2014-10-24 02:38:33 +02:00
futex.h MIPS: asm: futex: Set the appropriate ISA level for MIPS R6 2015-02-17 15:37:23 +00:00
gio_device.h MIPS: ip22-gio: Remove legacy suspend/resume support 2015-02-20 13:30:55 +01:00
gpio.h
gt64120.h
hardirq.h
hazards.h MIPS: asm: hazards: Add MIPSR6 definitions 2015-02-17 15:37:19 +00:00
highmem.h mips: delete non-required instances of include <linux/init.h> 2014-01-24 22:39:56 +01:00
hpet.h MIPS: Loongson-3: Add RS780/SBX00 HPET support 2014-11-24 07:45:02 +01:00
hugetlb.h mm/hugetlb: add more arch-defined huge_pte functions 2013-04-29 15:54:33 -07:00
hw_irq.h
i8259.h
ide.h
idle.h cpuidle: Invert CPUIDLE_FLAG_TIME_VALID logic 2014-11-12 21:17:27 +01:00
inst.h MIPS: MIPS16e: Support handling of delay slots. 2013-05-09 17:55:20 +02:00
io.h MIPS: Replace use of phys_t with phys_addr_t. 2014-11-24 22:47:31 +01:00
irq_cpu.h MIPS: Rename mips_cpu_intc_init() -> mips_cpu_irq_of_init() 2014-11-24 07:44:52 +01:00
irq_gt641xx.h
irq_regs.h
irq.h MIPS: Add arch_trigger_all_cpu_backtrace() function 2014-11-24 07:44:49 +01:00
irqflags.h MIPS: asm: irqflags: Add MIPS R6 related definitions 2015-02-17 15:37:20 +00:00
isadep.h
jazz.h
jazzdma.h
jump_label.h MIPS: jump_label.c: Handle the microMIPS J instruction encoding 2014-11-19 18:22:09 +01:00
Kbuild MIPS: Use generic checksum functions for MIPS R6 2015-02-17 15:37:19 +00:00
kdebug.h
kexec.h
kgdb.h
kmap_types.h
kprobes.h
kvm_host.h kvm: add halt_poll_ns module parameter 2015-02-06 13:08:37 +01:00
kvm_para.h MIPS: Add functions for hypervisor call 2014-05-30 21:01:11 +02:00
linkage.h consolidate cond_syscall and SYSCALL_ALIAS declarations 2013-03-03 22:55:19 -05:00
local.h MIPS: asm: local: Set the appropriate ISA level for MIPS R6 2015-02-17 15:37:24 +00:00
m48t37.h
maar.h MIPS: Initialise MAARs 2014-08-02 00:06:46 +02:00
mc146818-time.h
mc146818rtc.h
mips_machine.h MIPS: move mips_{set,get}_machine_name() to a more generic place 2013-05-08 01:19:07 +02:00
mips_mt.h MIPS: MT: Remove SMTC support 2014-05-24 00:07:01 +02:00
mips-cm.h MIPS: mips-cm: Fix sparse warnings 2015-01-13 15:53:09 +01:00
mips-cpc.h MIPS: Replace use of phys_t with phys_addr_t. 2014-11-24 22:47:31 +01:00
mips-r2-to-r6-emul.h MIPS: kernel: mips-r2-to-r6-emul: Add R2 emulator for MIPS R6 2015-02-17 15:37:37 +00:00
mipsmtregs.h MIPS: MT: define write_c0_tchalt macro 2014-05-28 16:20:22 +01:00
mipsprom.h
mipsregs.h Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2015-02-21 19:41:38 -08:00
mmu_context.h MIPS: HTW: Prevent accidental HTW start due to nested htw_{start, stop} 2015-02-16 10:55:26 +01:00
mmu.h MIPS,prctl: add PR_[GS]ET_FP_MODE prctl options for MIPS 2015-02-12 12:30:29 +01:00
mmzone.h
module.h MIPS: asm: module: define MODULE_PROC_FAMILY for MIPS R6 2015-02-17 15:37:17 +00:00
msa.h MIPS: fix read_msa_* & write_msa_* functions on non-MSA toolchains 2014-08-02 00:06:44 +02:00
msc01_ic.h
nile4.h mips: Update the email address of Geert Uytterhoeven 2014-06-02 16:34:41 +02:00
paccess.h MIPS: Apply `.insn' to fixup labels throughout 2014-11-24 07:45:36 +01:00
page.h MIPS: Replace MIPS-specific 64BIT_PHYS_ADDR with generic PHYS_ADDR_T_64BIT 2014-11-24 22:46:44 +01:00
pci.h mips: pci: Add ifdef around pci_proc_domain 2015-02-20 13:16:14 +01:00
perf_event.h
pgalloc.h mips: handle pgtable_page_ctor() fail 2013-11-15 09:32:18 +09:00
pgtable-32.h MIPS: Add support for XPA. 2015-03-19 17:39:49 +01:00
pgtable-64.h mips: drop _PAGE_FILE and pte_file()-related helpers 2015-02-10 14:30:32 -08:00
pgtable-bits.h MIPS: Add support for XPA. 2015-03-19 17:39:49 +01:00
pgtable.h Revert "MIPS: Remove race window in page fault handling" 2015-03-25 13:48:00 +01:00
pm-cps.h MIPS: pm-cps: add PM state entry code for CPS systems 2014-05-28 16:20:31 +01:00
pm.h Merge branch 'wip-mips-pm' of https://github.com/paulburton/linux into mips-for-linux-next 2014-05-29 15:08:23 +02:00
pmon.h
prefetch.h
processor.h MIPS: OCTEON: Save and restore CP2 SHA3 state 2015-02-20 15:29:08 +01:00
prom.h MIPS: Remove unused dt_setup_arch() 2015-01-16 13:10:42 +01:00
ptrace.h MIPS: OCTEON: Save/Restore wider multiply registers in OCTEON III CPUs 2015-02-20 15:28:29 +01:00
r4k-timer.h
r4kcache.h MIPS: asm: r4kcache: Add MIPS R6 cache unroll functions 2015-02-17 15:37:20 +00:00
reboot.h
reg.h MIPS: asm/reg.h: Move to uapi 2014-08-02 00:06:38 +02:00
regdef.h
rtlx.h MIPS: APRP: Code formatting clean-ups. 2014-01-22 20:19:02 +01:00
seccomp.h
setup.h MIPS: Add 8250/16550 serial early printk driver 2013-10-29 21:24:36 +01:00
sgialib.h MIPS: ARC: Add declarations for a few missing ARC firmware functions. 2015-01-13 16:04:28 +01:00
sgiarcs.h
shmparam.h
sigcontext.h Revert "MIPS: Save/restore MSA context around signals" 2014-06-26 10:48:18 +01:00
signal.h Fix breakage in MIPS siginfo handling 2013-03-19 19:15:52 +01:00
sim.h
smp-cps.h MIPS: pm-cps: Prevent use of mips_cps_* without CPS SMP 2014-07-30 20:47:39 +02:00
smp-ops.h MIPS: SMP: Remove plat_smp_ops cpus_done method. 2014-05-27 11:06:42 +02:00
smp.h MIPS: Move CPU topology macros to topology.h 2014-08-27 13:44:44 +02:00
sni.h
socket.h
sparsemem.h MIPS: Add NUMA support for Loongson-3 2014-07-30 21:46:19 +02:00
spinlock_types.h
spinlock.h MIPS: asm: spinlock: Replace "sub" instruction with "addiu" 2015-02-17 15:37:23 +00:00
spram.h MIPS: asm: spram: Add new symbol for MIPS scratch pad storage 2015-02-17 15:37:20 +00:00
stackframe.h MIPS: asm: stackframe: Do not preserve the HI/LO registers on MIPS R6 2015-02-17 15:37:17 +00:00
stackprotector.h MIPS: initial stack protector support 2013-07-01 15:10:48 +02:00
stacktrace.h
string.h
switch_to.h MIPS: Make use of the ERETNC instruction on MIPS R6 2015-02-17 15:37:37 +00:00
syscall.h MIPS: Fix syscall_get_nr for the syscall exit tracing. 2015-02-04 16:40:09 +01:00
termios.h
thread_info.h Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2015-02-21 19:41:38 -08:00
time.h clocksource: mips-gic: Use CPU notifiers to setup the timer 2014-11-24 07:45:16 +01:00
timex.h MIPS: Implement random_get_entropy with CP0 Random 2014-05-30 18:21:30 +02:00
tlb.h MIPS: tlb: Set the EHINV bit for TLBINVF cores when invalidating the TLB 2014-01-22 20:18:59 +01:00
tlbdebug.h
tlbflush.h
tlbmisc.h
topology.h MIPS: Move CPU topology macros to topology.h 2014-08-27 13:44:44 +02:00
traps.h
txx9irq.h
txx9pio.h
txx9tmr.h
types.h MIPS: Remove now unused definition of phys_t. 2014-11-24 22:47:31 +01:00
uaccess.h MIPS: uaccess.h: Fix strnlen_user comment. 2014-11-24 07:45:33 +01:00
uasm.h MIPS: Add MFHC0 and MTHC0 instructions to uasm. 2014-11-24 22:47:31 +01:00
unaligned.h
unistd.h sys_sgetmask/sys_ssetmask: add CONFIG_SGETMASK_SYSCALL 2014-06-04 16:54:14 -07:00
vdso.h
vga.h MIPS: Fix VGA_MAP_MEM macro. 2013-09-18 17:13:58 +02:00
vpe.h Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2014-01-30 17:20:32 -08:00
war.h
watch.h
wbflush.h