linux-uconsole/arch/s390/include/asm
Peter Zijlstra a03a2426ea arch: Introduce smp_load_acquire(), smp_store_release()
A number of situations currently require the heavyweight smp_mb(),
even though there is no need to order prior stores against later
loads.  Many architectures have much cheaper ways to handle these
situations, but the Linux kernel currently has no portable way
to make use of them.

This commit therefore supplies smp_load_acquire() and
smp_store_release() to remedy this situation.  The new
smp_load_acquire() primitive orders the specified load against
any subsequent reads or writes, while the new smp_store_release()
primitive orders the specifed store against any prior reads or
writes.  These primitives allow array-based circular FIFOs to be
implemented without an smp_mb(), and also allow a theoretical
hole in rcu_assign_pointer() to be closed at no additional
expense on most architectures.

In addition, the RCU experience transitioning from explicit
smp_read_barrier_depends() and smp_wmb() to rcu_dereference()
and rcu_assign_pointer(), respectively resulted in substantial
improvements in readability.  It therefore seems likely that
replacing other explicit barriers with smp_load_acquire() and
smp_store_release() will provide similar benefits.  It appears
that roughly half of the explicit barriers in core kernel code
might be so replaced.

[Changelog by PaulMck]
(cherry picked from commit 47933ad41a)

Reviewed-by: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Signed-off-by: Peter Zijlstra <peterz@infradead.org>
Acked-by: Will Deacon <will.deacon@arm.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Cc: Michael Ellerman <michael@ellerman.id.au>
Cc: Michael Neuling <mikey@neuling.org>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Victor Kaplansky <VICTORK@il.ibm.com>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Oleg Nesterov <oleg@redhat.com>
Link: http://lkml.kernel.org/r/20131213150640.908486364@infradead.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2014-10-07 16:42:29 -07:00
..
airq.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
appldata.h s390/appldata: change return value of appldata_asm 2012-09-26 15:45:15 +02:00
asm-offsets.h kbuild: move asm-offsets.h to include/generated 2009-12-12 13:08:14 +01:00
atomic.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
barrier.h arch: Introduce smp_load_acquire(), smp_store_release() 2014-10-07 16:42:29 -07:00
bitops.h s390/bitops: get rid of __BITOPS_BARRIER() 2013-04-17 14:07:30 +02:00
bug.h panic: Allow warnings to set different taint flags 2010-05-19 08:36:48 +01:00
bugs.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
cache.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
cacheflush.h module: undo module RONX protection correctly. 2011-05-19 16:55:26 +09:30
ccwdev.h s390/cio: ccw_device_force_console don't use static variable 2013-04-17 14:07:31 +02:00
ccwgroup.h s390/ccwgroup: allow drivers to call set_{on,off}line 2012-11-23 11:14:35 +01:00
checksum.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
chpid.h UAPI Disintegration 2012-10-09 2012-10-09 14:18:10 +02:00
cio.h s390/cio: wait_cons_dev don't use static variable 2013-04-17 14:07:30 +02:00
clp.h s390/pci: cleanup clp page allocation 2013-02-14 15:55:16 +01:00
cmb.h UAPI: (Scripted) Disintegrate arch/s390/include/asm 2012-10-09 09:47:31 +01:00
cmpxchg.h s390/cmpxchg,percpu: implement cmpxchg_double() 2012-09-26 15:45:25 +02:00
compat.h s390/uapi: change struct statfs[64] member types to unsigned values 2013-04-23 10:18:18 +02:00
cpcmd.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
cpu.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
cpu_mf.h Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2013-03-11 07:54:29 -07:00
cputime.h vtime: Consolidate a bit the ctx switch code 2012-11-19 16:41:32 +01:00
crw.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
css_chars.h s390/css_chars: remove superfluous ifdef 2012-10-09 14:17:00 +02:00
ctl_reg.h s390/headers: replace __s390x__ with CONFIG_64BIT where possible 2012-05-24 10:10:10 +02:00
current.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
debug.h UAPI: (Scripted) Disintegrate arch/s390/include/asm 2012-10-09 09:47:31 +01:00
delay.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
device.h
diag.h [S390] replace diag10() with diag10_range() function 2011-05-10 17:13:43 +02:00
div64.h
dma-mapping.h s390/dma: support debug_dma_mapping_error 2013-06-19 09:25:42 +02:00
dma.h s390/pci: define isa_dma_bridge_buggy 2013-01-08 10:57:09 +01:00
eadm.h s390/scm: process availability 2013-03-07 09:52:24 +01:00
ebcdic.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
elf.h s390: system call path micro optimization 2013-04-26 09:07:05 +02:00
emergency-restart.h
etr.h s390/etr,stp: use -EOPNOTSUPP instead of -ENOSYS 2012-09-26 15:45:14 +02:00
exec.h Disintegrate asm/system.h for S390 2012-03-28 18:30:02 +01:00
extmem.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
facility.h [S390] Fix stfle() lowcore protection problem 2012-04-11 14:28:26 +02:00
fb.h
fcx.h
ftrace.h s390/ftrace: fix mcount adjustment 2013-05-15 13:09:09 +02:00
futex.h s390/uaccess: remove pointless access_ok() checks 2013-02-28 09:37:09 +01:00
hardirq.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
hugetlb.h mm/hugetlb: add more arch-defined huge_pte functions 2013-04-29 15:54:33 -07:00
hw_irq.h s390/pci: PCI adapter interrupts for MSI/MSI-X 2012-11-30 17:47:21 +01:00
idals.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
io.h kernel: Fix s390 absolute memory access for /dev/mem 2013-05-22 09:45:57 +02:00
ipl.h [S390] kernel: Add z/VM LGR detection 2012-03-11 11:59:29 -04:00
irq.h Merge tag 'kvm-3.9-1' of git://git.kernel.org/pub/scm/virt/kvm/kvm 2013-02-24 13:07:18 -08:00
irq_regs.h
irqflags.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
isc.h s390/pci: PCI adapter interrupts for MSI/MSI-X 2012-11-30 17:47:21 +01:00
itcw.h UAPI: Alter the S390 asm include guards to be recognisable by the UAPI splitter 2011-12-13 09:26:45 +00:00
jump_label.h static keys: Introduce 'struct static_key', static_key_true()/false() and static_key_slow_[inc|dec]() 2012-02-24 10:05:59 +01:00
Kbuild tracing,x86: Add a TSC trace_clock 2012-11-13 15:48:27 -05:00
kdebug.h [S390] cleanup trap handling 2011-12-27 11:27:12 +01:00
kexec.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
kmap_types.h s390/headers: remove #ifdef __KERNEL__ from not exported headers 2012-05-24 10:10:05 +02:00
kprobes.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
kvm_host.h KVM: s390: Add support for channel I/O instructions. 2013-01-07 19:53:43 -02:00
kvm_para.h UAPI: (Scripted) Disintegrate arch/s390/include/asm 2012-10-09 09:47:31 +01:00
linkage.h [S390] fix s390 assembler code alignments 2011-07-24 10:48:21 +02:00
local.h
local64.h arch: Implement local64_t 2010-06-09 11:12:36 +02:00
lowcore.h s390: add support for transactional memory 2012-09-26 15:45:02 +02:00
mathemu.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
mman.h s390/mm: Fix crst upgrade of mmap with MAP_FIXED 2013-02-14 15:55:22 +01:00
mmu.h [S390] Fix build errors (fallout from system.h disintegration) 2012-03-30 09:41:12 +02:00
mmu_context.h s390/mm: rename addressing_mode to s390_user_mode 2012-09-26 15:45:05 +02:00
module.h Make most arch asm/module.h files use asm-generic/module.h 2012-09-28 14:31:03 +09:30
mutex.h [S390] mutex: Introduce arch_mutex_cpu_relax() 2011-01-05 12:47:31 +01:00
nmi.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
os_info.h s390/kernel: Remove OS info init function call and diag 308 for kdump 2012-05-23 17:06:50 +02:00
page.h s390: disable pfmf for clear page instruction 2013-05-07 14:11:55 +02:00
pci.h s390/pci: do not modify function handles 2013-04-17 14:07:36 +02:00
pci_clp.h s390/pci: CLP interface 2012-11-30 15:40:47 +01:00
pci_debug.h s390/pci: debug device states 2013-04-17 14:07:35 +02:00
pci_dma.h s390/pci: DMA support 2012-11-30 17:47:23 +01:00
pci_insn.h s390/pci: rename instruction wrappers 2013-04-17 14:07:37 +02:00
pci_io.h s390/pci: do not read data after failed load 2013-04-17 14:07:38 +02:00
percpu.h s390/cmpxchg,percpu: implement cmpxchg_double() 2012-09-26 15:45:25 +02:00
perf_event.h perf_cpum_cf: Add support for counters available with IBM zEC12 2012-10-18 17:50:09 +02:00
pgalloc.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
pgtable.h s390/pgtable: make pgste lock an explicit barrier 2013-06-05 17:36:21 +02:00
processor.h s390/dis: use explicit buf len 2013-04-17 14:07:25 +02:00
ptrace.h s390/ptrace: remove empty ifdefs 2013-04-23 10:18:14 +02:00
qdio.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
reset.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
runtime_instr.h s390: add support for runtime instrumentation 2012-09-26 15:45:02 +02:00
rwsem.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
scatterlist.h [S390] set ARCH_HAS_SG_CHAIN for s390 2010-10-25 16:10:15 +02:00
schid.h UAPI: (Scripted) Disintegrate arch/s390/include/asm 2012-10-09 09:47:31 +01:00
sclp.h s390/mm: implement software dirty bits 2013-02-14 15:55:23 +01:00
scsw.h s390: add eadm related structures 2012-09-26 15:44:57 +02:00
seccomp.h
sections.h
segment.h
setup.h s390/mem_detect: remove artificial kdump memory types 2013-05-03 14:21:15 +02:00
sfp-machine.h
sfp-util.h s390/headers: replace __s390x__ with CONFIG_64BIT where possible 2012-05-24 10:10:10 +02:00
shmparam.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
signal.h s390: switch to generic old sigaction() 2013-02-03 18:16:14 -05:00
sigp.h KVM: s390: Fix sigp sense handling. 2012-07-03 14:55:37 -03:00
smp.h s390/smp,topology: add polarization member to pcpu struct 2012-09-26 15:45:09 +02:00
sparsemem.h s390/mm: remove MAX_PHYSADDR_BITS define 2012-08-08 07:32:55 -07:00
spinlock.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
spinlock_types.h locking: Convert raw_rwlock to arch_rwlock 2009-12-14 23:55:32 +01:00
string.h s390/string: provide asm lib functions for memcpy and memcmp 2012-09-26 15:44:50 +02:00
switch_to.h Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux 2012-10-01 11:49:56 -07:00
syscall.h syscall_get_arch: remove useless function arguments 2014-10-07 15:36:24 -07:00
sysinfo.h s390/sysinfo,stsi: change return code handling 2012-09-26 15:45:12 +02:00
termios.h UAPI: (Scripted) Disintegrate arch/s390/include/asm 2012-10-09 09:47:31 +01:00
thread_info.h s390: remove small stack config option 2013-04-26 09:07:08 +02:00
timex.h s390/time: rename tod clock access functions 2013-02-14 15:55:10 +01:00
tlb.h thp, s390: architecture backend for thp on s390 2012-10-09 16:22:31 +09:00
tlbflush.h s390/mm: fix flush_tlb_kernel_range() 2013-03-05 10:21:36 +01:00
topology.h s390/topology: cleanup topology code 2012-11-23 11:14:31 +01:00
types.h UAPI: (Scripted) Disintegrate arch/s390/include/asm 2012-10-09 09:47:31 +01:00
uaccess.h s390/uaccess: remove pointless access_ok() checks 2013-02-28 09:37:09 +01:00
unaligned.h
unistd.h consolidate cond_syscall and SYSCALL_ALIAS declarations 2013-03-03 22:55:19 -05:00
user.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
vdso.h s390/headers: remove #ifdef __KERNEL__ from not exported headers 2012-05-24 10:10:05 +02:00
vga.h vga: compile fix, disable vga for s390 2012-11-30 17:47:28 +01:00
vtimer.h s390/vtimer: rework virtual timer interface 2012-07-20 11:15:08 +02:00
xor.h