linux-stable/arch/powerpc/include/asm
Peter Zijlstra 47933ad41a 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]

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-01-12 10:37:17 +01:00
..
8xx_immap.h
agp.h
archrandom.h powerpc: Implement arch_get_random_long/int() for powernv 2013-10-11 16:50:19 +11:00
asm-compat.h powerpc: Fix little endian lppaca, slb_shadow and dtl_entry 2013-08-14 15:33:35 +10:00
asm-offsets.h
async_tx.h
atomic.h
backlight.h
barrier.h arch: Introduce smp_load_acquire(), smp_store_release() 2014-01-12 10:37:17 +01:00
bitops.h powerpc: Remove unused postfix parameter to DEFINE_BITOP() 2013-04-18 11:53:04 +10:00
bootx.h
btext.h powerpc/pmac: Early debug output on screen on 64-bit macs 2013-08-14 14:57:40 +10:00
bug.h
bugs.h
cache.h
cacheflush.h powerpc: Remove the symbol __flush_icache_range 2013-08-14 14:56:44 +10:00
cell-pmu.h
cell-regs.h
checksum.h powerpc: Use generic checksum code in little endian 2013-10-11 16:48:39 +11:00
clk_interface.h
cmpxchg.h
code-patching.h
compat.h
context_tracking.h powerpc: Use the new schedule_user API on userspace preemption 2013-05-14 16:00:20 +10:00
cpm.h
cpm1.h
cpm2.h
cputable.h powerpc/fsl-booke: Work around erratum A-006958 2013-08-20 15:45:49 -05:00
cputhreads.h
cputime.h cputime: Generic on-demand virtual cputime accounting 2013-01-27 19:23:27 +01:00
current.h
dbdma.h
dbell.h powerpc: Select either privileged or hypervisor doorbell when sending 2013-01-10 15:09:06 +11:00
dcr-generic.h
dcr-mmio.h
dcr-native.h
dcr-regs.h
dcr.h
debug.h powerpc: Rename set_break to avoid naming conflict 2013-01-16 05:25:47 +11:00
delay.h
device.h powerpc: Add iommu domain pointer to device archdata 2013-08-14 11:38:34 +02:00
disassemble.h KVM: PPC: E500: exit to user space on "ehpriv 1" instruction 2013-10-17 14:49:39 +02:00
div64.h
dma-mapping.h powerpc: dma_debug: add debug_dma_mapping_error support 2012-11-28 15:28:59 +01:00
dma.h powerpc: remove PReP platform 2013-04-18 13:03:53 +10:00
edac.h
eeh.h powerpc/eeh: Introdce flag to protect sysfs 2013-07-24 14:18:49 +10:00
eeh_event.h powerpc/eeh: Allow to purge EEH events 2013-06-20 17:06:07 +10:00
ehv_pic.h
elf.h powerpc: Set eflags correctly for ELF ABIv2 core dumps. 2013-11-21 09:19:18 +11:00
emergency-restart.h
emulated_ops.h powerpc: Fix PPC_EMULATED_STATS build break with sync patch 2013-10-28 22:08:55 -05:00
epapr_hcalls.h powerpc/85xx: Move ePAPR paravirt initialization earlier 2013-08-07 18:38:06 -05:00
exception-64e.h
exception-64s.h kvm: powerpc: book3s: Cleanup interrupt handling code 2013-10-17 15:26:31 +02:00
exec.h
fadump.h
fb.h
feature-fixups.h
firmware.h powerpc/powernv: Detect OPAL v3 API version 2013-05-14 15:10:02 +10:00
fixmap.h
floppy.h
fs_pd.h
fsl_85xx_cache_sram.h
fsl_gtm.h powerpc: Fix typos in Freescale copyright claims 2012-11-15 13:00:58 +11:00
fsl_guts.h powerpc/iommu/fsl: Add PAMU bypass enable register to ccsr_guts struct 2012-11-25 07:19:39 -06:00
fsl_hcalls.h
fsl_ifc.h driver/mtd/IFC: Add support of 8K page size NAND flash 2013-11-06 23:33:00 -08:00
fsl_lbc.h
fsl_pamu_stash.h iommu/fsl: Add additional iommu attributes required by the PAMU driver. 2013-08-14 11:38:34 +02:00
ftrace.h
futex.h
gpio.h
grackle.h
hardirq.h powerpc: Add accounting for Doorbell interrupts 2013-04-18 15:59:55 +10:00
heathrow.h
highmem.h
hugetlb.h powerpc: move find_linux_pte_or_hugepte and gup_hugepte to common code 2013-06-21 16:01:54 +10:00
hvcall.h pseries: Add H_SET_MODE to change exception endianness 2013-11-21 09:19:16 +11:00
hvconsole.h
hvcserver.h
hvsi.h powerpc/hvsi: Fix endian issues in HVSI driver 2013-10-11 16:48:53 +11:00
hw_breakpoint.h powerpc: Change hardware breakpoint to allow longer ranges 2013-01-29 11:35:08 +11:00
hw_irq.h powerpc: Access local paca after hard irq disabled 2013-07-24 14:18:44 +10:00
hydra.h
i8259.h
ibmebus.h ibmebus: convert of_platform_driver to platform_driver 2013-06-12 12:37:26 +01:00
ide.h
immap_cpm2.h
immap_qe.h powerpc: Fix typos in Freescale copyright claims 2012-11-15 13:00:58 +11:00
io-defs.h
io-workarounds.h POWERPC: drivers: remove __dev* attributes. 2013-01-03 15:57:04 -08:00
io.h powerpc: Enable /dev/port when isa_io_special is set 2013-10-11 16:53:30 +11:00
io_event_irq.h
iommu.h powerpc/iommu: Remove unused pci_iommu_init() and pci_direct_iommu_init() 2013-07-01 11:10:35 +10:00
ipic.h
irq.h powerpc/irq: Run softirqs off the top of the irq stack 2013-09-25 14:15:36 +10:00
irq_regs.h
irqflags.h powerpc/ppc64: Rename SOFT_DISABLE_INTS with RECONCILE_IRQ_STATE 2013-08-14 14:57:47 +10:00
jump_label.h compiler/gcc4: Add quirk for 'asm goto' miscompilation bug 2013-10-11 07:39:14 +02:00
Kbuild sched, arch: Create asm/preempt.h 2013-09-25 14:07:50 +02:00
kdebug.h
kdump.h
kexec.h
keylargo.h
kgdb.h
kmap_types.h
kprobes.h
kvm_44x.h
kvm_asm.h KVM: PPC: Book3S HV: Better handling of exceptions that happen in real mode 2013-10-17 14:49:37 +02:00
kvm_book3s.h kvm: powerpc: book3s: Add is_hv_enabled to kvmppc_ops 2013-10-17 15:29:09 +02:00
kvm_book3s_32.h KVM: PPC: Book3S PR: Allocate kvm_vcpu structs from kvm_vcpu_cache 2013-10-17 14:45:05 +02:00
kvm_book3s_64.h kvm: powerpc: book3s: Add a new config variable CONFIG_KVM_BOOK3S_HV_POSSIBLE 2013-10-17 15:18:28 +02:00
kvm_book3s_asm.h kvm: powerpc: book3s: Add a new config variable CONFIG_KVM_BOOK3S_HV_POSSIBLE 2013-10-17 15:18:28 +02:00
kvm_booke.h KVM: PPC: E500: exit to user space on "ehpriv 1" instruction 2013-10-17 14:49:39 +02:00
kvm_booke_hv_asm.h KVM: PPC: bookehv64: Add support for interrupt handling 2012-12-06 01:34:11 +01:00
kvm_fpu.h
kvm_host.h kvm: powerpc: book3s: Allow the HV and PR selection per virtual machine 2013-10-17 18:42:36 +02:00
kvm_para.h Merge remote-tracking branch 'master' into queue 2012-10-29 19:15:32 -02:00
kvm_ppc.h kvm: powerpc: book3s: drop is_hv_enabled 2013-10-17 18:43:34 +02:00
libata-portmap.h
linkage.h consolidate cond_syscall and SYSCALL_ALIAS declarations 2013-03-03 22:55:19 -05:00
local.h
local64.h
lppaca.h powerpc/pseries: Fix dedicated processor partition detection 2013-10-30 16:01:43 +11:00
lv1call.h
machdep.h Merge branch 'for-kvm' into next 2013-10-11 18:23:53 +11:00
macio.h
mc146818rtc.h
mediabay.h
mman.h
mmu-8xx.h
mmu-40x.h
mmu-44x.h
mmu-book3e.h powerpc: Fix build error for book3e 2013-05-02 10:37:37 +10:00
mmu-hash32.h
mmu-hash64.h powerpc: Book 3S MMU little endian support 2013-10-11 16:48:26 +11:00
mmu.h powerpc: POWER8 cputable entry 2012-11-15 13:00:45 +11:00
mmu_context.h sched: Rename sched.c as sched/core.c in comments and Documentation 2013-06-19 12:58:42 +02:00
mmzone.h
module.h powerpc/modules: Module CRC relocation fix causes perf issues 2013-07-24 14:18:43 +10:00
mpc5xxx.h
mpc6xx.h
mpc8xx.h
mpc52xx.h
mpc52xx_psc.h serial/mpc52xx_uart: add MPC5125 PSC support 2013-06-03 10:22:35 -07:00
mpc85xx.h powerpc/85xx: Add support for 85xx cpu type detection 2013-08-23 19:01:03 -05:00
mpc5121.h powerpc: mpc512x: array decl for MCLK registers in CCM 2013-08-23 23:41:55 +02:00
mpc8260.h
mpic.h powerpc/msi: Fix compile error on mpc83xx 2013-08-07 18:38:04 -05:00
mpic_msgr.h
mpic_timer.h powerpc/mpic: add global timer support 2013-07-01 18:38:41 -05:00
msi_bitmap.h
mutex.h arch: Make __mutex_fastpath_lock_retval return whether fastpath succeeded or not 2013-06-26 12:10:55 +02:00
nvram.h
ohare.h
opal.h powerpc/powernv: Code update interface 2013-10-30 16:12:02 +11:00
oprofile_impl.h treewide: fix typo of "suport" in various comments and Kconfig 2012-11-19 14:16:09 +01:00
paca.h kvm: powerpc: book3s: pr: Rename KVM_BOOK3S_PR to KVM_BOOK3S_PR_POSSIBLE 2013-10-17 15:17:49 +02:00
page.h powerpc: Fix 64K page size support for PPC44x 2013-10-30 16:00:51 +11:00
page_32.h
page_64.h mm: remove free_area_cache use in powerpc architecture 2013-04-30 11:05:10 +10:00
parport.h powerpc: use for_each_compatible_node() macro 2013-04-18 13:03:50 +10:00
pasemi_dma.h
pci-bridge.h powerpc/pci: Don't use bitfield for force_32bit_msi 2013-08-14 11:50:25 +10:00
pci.h PCI: use weak functions for MSI arch-specific functions 2013-08-12 15:26:39 +00:00
percpu.h
perf_event.h
perf_event_fsl_emb.h powerpc/perf: increase the perf HW events to 6 2013-08-07 18:38:03 -05:00
perf_event_server.h Linux 3.11-rc5 2013-08-15 10:00:09 +02:00
pgalloc-32.h powerpc: Fix PTE page address mismatch in pgtable ctor/dtor 2013-12-10 11:25:05 +11:00
pgalloc-64.h powerpc: Fix PTE page address mismatch in pgtable ctor/dtor 2013-12-10 11:25:05 +11:00
pgalloc.h powerpc: Move the pte free routines from common header 2013-04-30 16:00:04 +10:00
pgtable-ppc32.h
pgtable-ppc64-4k.h
pgtable-ppc64-64k.h powerpc/THP: Double the PMD table size for THP 2013-06-21 16:01:53 +10:00
pgtable-ppc64.h powerpc: Prepare to support kernel handling of IOMMU map/unmap 2013-10-11 17:24:39 +11:00
pgtable.h Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc 2013-07-04 10:29:23 -07:00
plpar_wrappers.h pseries: Add H_SET_MODE to change exception endianness 2013-11-21 09:19:16 +11:00
pmac_feature.h
pmac_low_i2c.h
pmac_pfunc.h
pmc.h
pmi.h
ppc-opcode.h powerpc/bpf: Fix DIVWU instruction opcode 2013-10-31 16:19:20 +11:00
ppc-pci.h
ppc4xx.h
ppc4xx_ocm.h powerpc/44x: Support OCM(On Chip Memory) for APM821xx SoC and Bluestone board 2013-01-10 15:08:37 +11:00
ppc_asm.h powerpc/8xx: mfspr SPRN_TBRx in lieu of mftb/mftbu is not supported 2013-11-22 16:56:48 -06:00
probes.h powerpc: Move the single step enable code to a generic path 2013-06-20 16:55:09 +10:00
processor.h Here are the 3.13 KVM changes. There was a lot of work on the PPC 2013-11-15 13:51:36 +09:00
prom.h DeviceTree updates for 3.13. This is a bit larger pull request than 2013-11-12 16:52:17 +09:00
ps3.h powerpc/ps3: Add macro PS3_VERBOSE_RESULT 2013-02-15 16:54:39 +11:00
ps3av.h
ps3gpu.h
ps3stor.h
pte-8xx.h
pte-40x.h
pte-44x.h
pte-book3e.h powerpc: book3e: _PAGE_LENDIAN must be _PAGE_ENDIAN 2013-10-17 14:49:37 +02:00
pte-common.h
pte-fsl-booke.h
pte-hash32.h
pte-hash64-4k.h
pte-hash64-64k.h powerpc: Fix build errors STRICT_MM_TYPECHECKS 2013-05-14 14:36:20 +10:00
pte-hash64.h
ptrace.h powerpc: fixing ptrace_get_reg to return an error 2013-04-18 13:03:57 +10:00
qe.h powerpc: Fix typos in Freescale copyright claims 2012-11-15 13:00:58 +11:00
qe_ic.h powerpc: Fix typos in Freescale copyright claims 2012-11-15 13:00:58 +11:00
reg.h powerpc/8xx: mfspr SPRN_TBRx in lieu of mftb/mftbu is not supported 2013-11-22 16:56:48 -06:00
reg_8xx.h
reg_a2.h
reg_booke.h powerpc: move debug registers in a structure 2013-10-18 18:44:49 -05:00
reg_fsl_emb.h powerpc/perf: Add e6500 PMU driver 2013-08-07 18:38:04 -05:00
rheap.h
rio.h
rtas.h powerpc: Make RTAS calls endian safe 2013-08-14 15:33:22 +10:00
rtc.h
runlatch.h
scatterlist.h
scom.h powerpc/scom: Enable 64-bit addresses 2013-11-06 14:13:49 +11:00
sections.h powerpc: Relocate prom_init.c on 64bit 2013-01-10 17:00:25 +11:00
serial.h
setjmp.h
setup.h powerpc: Move local setup.h declarations to arch includes 2013-10-30 16:00:31 +11:00
sfp-machine.h powerpc: Put FP/VSX and VR state into structures 2013-10-11 17:26:49 +11:00
shmparam.h
signal.h powerpc/tm: Fix userspace stack corruption on signal delivery for active transactions 2013-06-01 08:29:23 +10:00
smp.h powerpc: Make cpu_to_chip_id() available when SMP=n 2013-11-21 10:33:44 +11:00
smu.h Fix misspellings of "whether" in comments. 2012-11-19 14:31:35 +01:00
sparsemem.h
spinlock.h powerpc: Full barrier for smp_mb__after_unlock_lock() 2013-12-16 11:36:18 +01:00
spinlock_types.h
spu.h switch elf_coredump_extra_notes_write() to dump_emit() 2013-11-09 00:16:24 -05:00
spu_csa.h
spu_info.h
spu_priv1.h
sstep.h
string.h powerpc: Use generic memcpy code in little endian 2013-10-11 16:48:40 +11:00
swab.h
swiotlb.h
switch_to.h powerpc: export debug registers save function for KVM 2013-10-18 18:46:18 -05:00
synch.h
syscall.h
syscalls.h powerpc: trim the crap from syscalls.h 2013-02-03 18:16:11 -05:00
systbl.h Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal 2013-05-01 07:21:43 -07:00
tce.h
termios.h
thread_info.h Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc 2013-11-20 15:13:47 -08:00
time.h
timex.h powerpc/8xx: mfspr SPRN_TBRx in lieu of mftb/mftbu is not supported 2013-11-22 16:56:48 -06:00
tlb.h
tlbflush.h powerpc/THP: Implement transparent hugepages for ppc64 2013-06-21 16:01:53 +10:00
tm.h powerpc/tm: Move TM abort cause codes to uapi 2013-06-01 08:29:23 +10:00
topology.h powerpc: Make chip-id information available to userspace 2013-08-14 15:33:17 +10:00
trace.h
tsi108.h
tsi108_irq.h
tsi108_pci.h
types.h
uaccess.h powerpc: uaccess s/might_sleep/might_fault/ 2013-05-28 09:41:09 +02:00
ucc.h powerpc: Fix typos in Freescale copyright claims 2012-11-15 13:00:58 +11:00
ucc_fast.h powerpc: Fix typos in Freescale copyright claims 2012-11-15 13:00:58 +11:00
ucc_slow.h powerpc: Fix typos in Freescale copyright claims 2012-11-15 13:00:58 +11:00
udbg.h powerpc: Cleanup udbg_16550 and add support for LPC PIO-only UARTs 2013-08-14 14:58:15 +10:00
uic.h
unaligned.h
uninorth.h
unistd.h Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal 2013-05-01 07:21:43 -07:00
uprobes.h uprobes: Introduce arch_uprobe->ixol 2013-11-06 20:00:05 +01:00
user.h
vdso.h powerpc: Delete __cpuinit usage from all users 2013-07-01 11:10:36 +10:00
vdso_datapage.h
vga.h
vio.h POWERPC: drivers: remove __dev* attributes. 2013-01-03 15:57:04 -08:00
word-at-a-time.h powerpc: word-at-a-time optimization for 64-bit Little Endian 2013-10-31 16:19:16 +11:00
wsp.h
xics.h powerpc/powernv: Patch MSI EOI handler on P8 2013-04-26 16:09:59 +10:00
xilinx_intc.h
xilinx_pci.h
xmon.h
xor.h powerpc: Add VMX optimised xor for RAID5 2013-10-30 16:02:28 +11:00