android_kernel_sony_sdm845/arch/parisc/include/asm
Repository files (latest commit first)
Filename Latest commit message Latest commit date
John David Anglin 12efc91591 parisc: Fix ordering of cache and TLB flushes
commit 0adb24e03a124b79130c9499731936b11ce2677d upstream.

The change to flush_kernel_vmap_range() wasn't sufficient to avoid the
SMP stalls.  The problem is some drivers call these routines with
interrupts disabled.  Interrupts need to be enabled for flush_tlb_all()
and flush_cache_all() to work.  This version adds checks to ensure
interrupts are not disabled before calling routines that need IPI
interrupts.  When interrupts are disabled, we now drop into slower code.

The attached change fixes the ordering of cache and TLB flushes in
several cases.  When we flush the cache using the existing PTE/TLB
entries, we need to flush the TLB after doing the cache flush.  We don't
need to do this when we flush the entire instruction and data caches as
these flushes don't use the existing TLB entries.  The same is true for
tmpalias region flushes.

The flush_kernel_vmap_range() and invalidate_kernel_vmap_range()
routines have been updated.

Secondly, we added a new purge_kernel_dcache_range_asm() routine to
pacache.S and use it in invalidate_kernel_vmap_range().  Nominally,
purges are faster than flushes as the cache lines don't have to be
written back to memory.

Hopefully, this is sufficient to resolve the remaining problems due to
cache speculation.  So far, testing indicates that this is the case.  I
did work up a patch using tmpalias flushes, but there is a performance
hit because we need the physical address for each page, and we also need
to sequence access to the tmpalias flush code.  This increases the
probability of stalls.

Signed-off-by: John David Anglin <dave.anglin@bell.net>
Cc: stable@vger.kernel.org # 4.9+
Signed-off-by: Helge Deller <deller@gmx.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2018-03-11 16:21:28 +01:00
..
agp.h
asm-offsets.h
asmregs.h
assembly.h parisc: Use generic extable search and sort routines 2016-03-23 16:00:46 +01:00
atomic.h locking/atomic: Remove linux/atomic.h:atomic_fetch_or() 2016-06-16 10:48:32 +02:00
bitops.h parisc: Don't use BITS_PER_LONG in userspace-exported swab.h header 2017-02-01 08:33:08 +01:00
bug.h [PARISC] fix missing TAINT_WARN problem 2012-06-05 14:10:17 +09:00
bugs.h
cache.h arch: Introduce post-init read-only memory 2016-02-22 08:51:38 +01:00
cacheflush.h parisc: Fix ordering of cache and TLB flushes 2018-03-11 16:21:28 +01:00
checksum.h ipv6: Pass proto to csum_ipv6_magic as __u8 instead of unsigned short 2016-03-13 23:55:13 -04:00
cmpxchg.h parisc: Add native high-resolution sched_clock() implementation 2016-05-22 21:39:25 +02:00
compat.h parisc: Fix SIGSYS signals in compat case 2016-03-31 12:28:37 +02:00
compat_ucontext.h
current.h
delay.h parisc: make udelay() SMP-safe 2013-11-07 22:28:26 +01:00
dma-mapping.h parisc: DMA API: return error instead of BUG_ON for dma ops on non dma devs 2017-07-21 07:42:20 +02:00
dma.h
dwarf.h parisc: Add cfi_startproc and cfi_endproc to assembly code 2016-10-05 22:54:40 +02:00
eisa_bus.h
eisa_eeprom.h parisc: Fix typos in eisa_eeprom.h 2016-05-22 21:57:40 +02:00
elf.h parisc,metag: Fix crashes due to stack randomization on stack-grows-upwards architectures 2015-05-12 22:03:44 +02:00
fb.h
fixmap.h
floppy.h parisc: Use parentheses around expression in floppy.h 2016-03-01 22:51:04 +01:00
ftrace.h parisc: Add syscall tracepoint support 2016-05-22 21:38:47 +02:00
futex.h parisc: Update futex.h to match generic implementation 2016-05-22 21:48:54 +02:00
grfioctl.h
hardirq.h parisc: do not count IPI calls twice 2013-11-07 22:28:54 +01:00
hardware.h
hash.h parisc: Add <asm/hash.h> 2016-08-02 16:44:29 +02:00
hugetlb.h parisc: Protect huge page pte changes with spinlocks 2016-01-16 19:19:14 +01:00
ide.h
io.h parisc: Define ioremap_uc and ioremap_wc 2015-09-08 15:30:37 +02:00
irq.h
irqflags.h
kbdleds.h
Kbuild mm: clean up per architecture MM hook header files 2015-07-17 16:39:53 -07:00
kmap_types.h
ldcw.h parisc: Fix alignment of pa_tlb_lock in assembly on 32-bit SMP kernel 2018-01-10 09:29:54 +01:00
led.h
linkage.h parisc: Add cfi_startproc and cfi_endproc to assembly code 2016-10-05 22:54:40 +02:00
machdep.h
mckinley.h
mmu.h
mmu_context.h parisc/mm: Ensure IRQs are off in switch_mm() 2017-07-21 07:42:20 +02:00
mmzone.h parisc: fix kernel BUG at arch/parisc/include/asm/mmzone.h:50 (part 2) 2013-06-18 20:20:21 +02:00
module.h Make most arch asm/module.h files use asm-generic/module.h 2012-09-28 14:31:03 +09:30
page.h parisc: Add defines for Huge page support 2015-11-22 12:22:34 +01:00
parisc-device.h parisc: Fix interrupt routing for C8000 serial ports 2013-07-31 23:42:32 +02:00
parport.h ARCH: drivers remove __dev* attributes. 2013-01-03 15:57:13 -08:00
pci.h PCI: Move pci_dma_* helpers to common code 2016-03-07 10:40:02 -06:00
pdc.h parisc: Imporove debug info about space registers and TLB configuration 2016-01-12 22:12:09 +01:00
pdc_chassis.h
pdcpat.h
perf.h
perf_event.h
pgalloc.h parisc: get rid of superfluous __GFP_REPEAT 2016-06-24 17:23:52 -07:00
pgtable.h parisc: Purge TLB before setting PTE 2016-12-07 08:56:40 +01:00
prefetch.h
processor.h parisc: Reduce overhead of parisc_requires_coherency() 2016-01-12 22:03:36 +01:00
psw.h
ptrace.h parisc: add kernel audit feature 2013-11-07 22:27:20 +01:00
ropes.h
rt_sigframe.h
runway.h
sections.h
serial.h parisc: remove empty SERIAL_PORT_DFNS in serial.h 2013-11-30 21:02:18 +01:00
shmparam.h parisc: change value of SHMLBA from 0x00400000 to PAGE_SIZE 2014-04-13 15:00:53 +02:00
signal.h Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal 2013-02-23 18:50:11 -08:00
smp.h
socket.h parisc: break out SOCK_NONBLOCK define to own asm header file 2013-11-19 23:36:17 +01:00
special_insns.h parisc: optimize mtsp(0,sr) inline assembly 2013-07-09 22:09:21 +02:00
spinlock.h locking/spinlock, arch: Update and fix spin_unlock_wait() implementations 2016-06-14 11:55:15 +02:00
spinlock_types.h
string.h
superio.h
switch_to.h
syscall.h parisc: Add syscall tracepoint support 2016-05-22 21:38:47 +02:00
termios.h UAPI: (Scripted) Disintegrate arch/parisc/include/asm 2012-10-16 21:28:05 +01:00
thread_info.h parisc: Add syscall tracepoint support 2016-05-22 21:38:47 +02:00
timex.h
tlb.h
tlbflush.h parisc: Fix some PTE/TLB race conditions and optimize __flush_tlb_range based on timing results 2015-07-10 21:47:47 +02:00
traps.h parisc: Show trap name in kernel crash 2016-10-11 20:52:47 +02:00
uaccess.h parisc: Fix get_user() for 64-bit value on 32-bit kernel 2017-04-21 09:31:23 +02:00
ucontext.h
unaligned.h
unistd.h sys_sgetmask/sys_ssetmask: add CONFIG_SGETMASK_SYSCALL 2014-06-04 16:54:14 -07:00
unwind.h