linux-sg2042/arch/powerpc/platforms/powernv
Nicholas Piggin a048a07d7f powerpc/64s: Add support for a store forwarding barrier at kernel entry/exit
On some CPUs we can prevent a vulnerability related to store-to-load
forwarding by preventing store forwarding between privilege domains,
by inserting a barrier in kernel entry and exit paths.

This is known to be the case on at least Power7, Power8 and Power9
powerpc CPUs.

Barriers must be inserted generally before the first load after moving
to a higher privilege, and after the last store before moving to a
lower privilege, HV and PR privilege transitions must be protected.

Barriers are added as patch sections, with all kernel/hypervisor entry
points patched, and the exit points to lower privilge levels patched
similarly to the RFI flush patching.

Firmware advertisement is not implemented yet, so CPU flush types
are hard coded.

Thanks to Michal Suchánek for bug fixes and review.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Mauricio Faria de Oliveira <mauricfo@linux.vnet.ibm.com>
Signed-off-by: Michael Neuling <mikey@neuling.org>
Signed-off-by: Michal Suchánek <msuchanek@suse.de>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2018-05-21 20:45:31 -07:00
..
Kconfig License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
Makefile powerpc/powernv/vas: Remove a stray line in Makefile 2018-03-13 15:10:14 +11:00
copy-paste.h powerpc/powernv/vas: Define copy/paste interfaces 2017-08-31 14:26:38 +10:00
eeh-powernv.c powerpc/eeh: Add eeh_state_active() helper 2018-03-27 23:45:19 +11:00
idle.c powerpc/powernv: Fix SMT4 forcing idle code 2018-04-03 22:14:27 +10:00
memtrace.c powerpc/powernv/memtrace: Let the arch hotunplug code flush cache 2018-04-24 09:46:56 +10:00
npu-dma.c powerpc/powernv/npu: Do a PID GPU TLB flush when invalidating a large address range 2018-04-24 09:46:57 +10:00
ocxl.c ocxl: Add AFU interrupt support 2018-01-24 11:42:58 +11:00
opal-async.c powerpc/opal: Add opal_async_wait_response_interruptible() to opal-async 2017-11-06 20:39:28 +11:00
opal-dump.c powerpc: Use octal numbers for file permissions 2018-01-22 05:48:33 +11:00
opal-elog.c powerpc: Use octal numbers for file permissions 2018-01-22 05:48:33 +11:00
opal-flash.c powerpc/powernv: Always stop secondaries before reboot/shutdown 2018-04-03 22:59:57 +10:00
opal-hmi.c powerpc: Use sizeof(*foo) rather than sizeof(struct foo) 2018-03-20 16:47:53 +11:00
opal-imc.c powerpc: Use sizeof(*foo) rather than sizeof(struct foo) 2018-03-20 16:47:53 +11:00
opal-irqchip.c powerpc/powernv: Make opal_event_shutdown() callable from IRQ context 2017-10-06 20:03:08 +11:00
opal-kmsg.c powerpc/powernv: Fix OPAL_CONSOLE_FLUSH prototype and usages 2016-01-13 12:35:17 +11:00
opal-lpc.c powerpc: Create asm/debugfs.h and move powerpc_debugfs_root there 2017-04-11 07:46:03 +10:00
opal-memory-errors.c powerpc: Use sizeof(*foo) rather than sizeof(struct foo) 2018-03-20 16:47:53 +11:00
opal-msglog.c locking/atomics: COCCINELLE/treewide: Convert trivial ACCESS_ONCE() patterns to READ_ONCE()/WRITE_ONCE() 2017-10-25 11:01:08 +02:00
opal-nvram.c powerpc/powernv: Fix NVRAM sleep in invalid context when crashing 2018-05-18 00:23:07 +10:00
opal-power.c powerpc/powernv: Add poweroff (EPOW, DPO) events support for PowerNV platform 2015-07-16 13:34:36 +10:00
opal-powercap.c powerpc/powernv: Add support for powercap framework 2017-08-10 22:39:53 +10:00
opal-prd.c vfs: do bulk POLL* -> EPOLL* replacement 2018-02-11 14:34:03 -08:00
opal-psr.c powerpc: Use sizeof(*foo) rather than sizeof(struct foo) 2018-03-20 16:47:53 +11:00
opal-rtc.c rtc: opal: Fix OPAL RTC driver OPAL_BUSY loops 2018-04-25 13:24:13 +10:00
opal-sensor-groups.c powerpc: Use sizeof(*foo) rather than sizeof(struct foo) 2018-03-20 16:47:53 +11:00
opal-sensor.c powernv/opal-sensor: remove not needed lock 2017-11-06 20:33:56 +11:00
opal-sysparam.c powerpc: Use octal numbers for file permissions 2018-01-22 05:48:33 +11:00
opal-tracepoints.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
opal-wrappers.S powerpc/powernv: Enable tunneled operations 2018-03-13 15:50:30 +11:00
opal-xscom.c powerpc: Use sizeof(*foo) rather than sizeof(struct foo) 2018-03-20 16:47:53 +11:00
opal.c libnvdimm for 4.17 2018-04-10 10:25:57 -07:00
pci-cxl.c powerpc/powernv: Enable tunneled operations 2018-03-13 15:50:30 +11:00
pci-ioda.c powerpc/powernv/npu: Do not try invalidating 32bit table when 64bit table is enabled 2018-03-27 23:44:57 +11:00
pci.c powerpc/powernv: Enable tunneled operations 2018-03-13 15:50:30 +11:00
pci.h powerpc/powernv: Introduce new PHB type for opencapi links 2018-01-24 11:42:56 +11:00
powernv.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
rng.c powerpc: Convert to using %pOF instead of full_name 2017-08-23 22:27:04 +10:00
setup.c powerpc/64s: Add support for a store forwarding barrier at kernel entry/exit 2018-05-21 20:45:31 -07:00
smp.c powerpc/64: Use array of paca pointers and allocate pacas individually 2018-03-30 23:34:23 +11:00
subcore-asm.S powerpc/powernv: Add support for POWER8 split core on powernv 2014-05-28 13:35:37 +10:00
subcore.c powerpc/64: Use array of paca pointers and allocate pacas individually 2018-03-30 23:34:23 +11:00
subcore.h powernv/powerpc: Add winkle support for offline cpus 2014-12-15 10:46:41 +11:00
vas-debug.c powerpc/vas: Fix cleanup when VAS is not configured 2018-03-14 20:11:37 +11:00
vas-trace.h powerpc/vas: Add a couple of trace points 2018-03-14 20:13:58 +11:00
vas-window.c powerpc/vas: Add a couple of trace points 2018-03-14 20:13:58 +11:00
vas.c powerpc/vas: Fix cleanup when VAS is not configured 2018-03-14 20:11:37 +11:00
vas.h powerpc/vas: Define vas_win_id() 2017-11-12 09:03:10 +11:00