linux/arch/sparc/include/asm
Peter Zijlstra 726328d92a locking/spinlock, arch: Update and fix spin_unlock_wait() implementations
This patch updates/fixes all spin_unlock_wait() implementations.

The update is in semantics; where it previously was only a control
dependency, we now upgrade to a full load-acquire to match the
store-release from the spin_unlock() we waited on. This ensures that
when spin_unlock_wait() returns, we're guaranteed to observe the full
critical section we waited on.

This fixes a number of spin_unlock_wait() users that (not
unreasonably) rely on this.

I also fixed a number of ticket lock versions to only wait on the
current lock holder, instead of for a full unlock, as this is
sufficient.

Furthermore; again for ticket locks; I added an smp_rmb() in between
the initial ticket load and the spin loop testing the current value
because I could not convince myself the address dependency is
sufficient, esp. if the loads are of different sizes.

I'm more than happy to remove this smp_rmb() again if people are
certain the address dependency does indeed work as expected.

Note: PPC32 will be fixed independently

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: chris@zankel.net
Cc: cmetcalf@mellanox.com
Cc: davem@davemloft.net
Cc: dhowells@redhat.com
Cc: james.hogan@imgtec.com
Cc: jejb@parisc-linux.org
Cc: linux@armlinux.org.uk
Cc: mpe@ellerman.id.au
Cc: ralf@linux-mips.org
Cc: realmz6@gmail.com
Cc: rkuo@codeaurora.org
Cc: rth@twiddle.net
Cc: schwidefsky@de.ibm.com
Cc: tony.luck@intel.com
Cc: vgupta@synopsys.com
Cc: ysato@users.sourceforge.jp
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2016-06-14 11:55:15 +02:00
..
agp.h
apb.h
asm-offsets.h
asm.h
asmmacro.h
atomic.h
atomic_32.h atomic: Provide atomic_{or,xor,and} 2015-07-27 14:06:24 +02:00
atomic_64.h atomic, arch: Audit atomic_{read,set}() 2015-09-23 09:54:28 +02:00
auxio.h
auxio_32.h
auxio_64.h
backoff.h
barrier.h
barrier_32.h sparc: reuse asm-generic/barrier.h 2016-01-12 20:46:49 +02:00
barrier_64.h sparc: define __smp_xxx 2016-01-12 20:46:57 +02:00
bbc.h
bitext.h
bitops.h
bitops_32.h
bitops_64.h
btext.h
bug.h
bugs.h
cache.h
cacheflush.h
cacheflush_32.h
cacheflush_64.h mm/debug_pagealloc: fix build failure on ppc and some other archs 2015-02-05 13:35:30 -08:00
cachetlb_32.h
chafsr.h
checksum.h
checksum_32.h ipv6: Pass proto to csum_ipv6_magic as __u8 instead of unsigned short 2016-03-13 23:55:13 -04:00
checksum_64.h ipv6: Pass proto to csum_ipv6_magic as __u8 instead of unsigned short 2016-03-13 23:55:13 -04:00
chmctrl.h
clock.h
cmpxchg.h
cmpxchg_32.h arch: Remove __ARCH_HAVE_CMPXCHG 2015-05-13 10:55:42 +02:00
cmpxchg_64.h arch: Remove __ARCH_HAVE_CMPXCHG 2015-05-13 10:55:42 +02:00
compat.h sparc/compat: provide an accurate in_compat_syscall implementation 2016-03-22 15:36:02 -07:00
compat_signal.h sparc: Convert naked unsigned uses to unsigned int 2016-03-20 21:28:58 -07:00
contregs.h
cpu_type.h
cpudata.h
cpudata_32.h
cpudata_64.h sparc64: Setup sysfs to mark LDOM sockets, cores and threads correctly 2015-04-22 15:42:56 -04:00
current.h
dcr.h
dcu.h
delay.h
delay_32.h
delay_64.h
device.h
dma-mapping.h dma-mapping: always provide the dma_map_ops based implementation 2016-01-20 17:09:18 -08:00
dma.h
ebus_dma.h
ecc.h
eeprom.h
elf.h
elf_32.h
elf_64.h sparc64: Add ADI capability to cpu capabilities 2015-12-24 12:05:06 -05:00
estate.h
fb.h
fbio.h
fhc.h
floppy.h
floppy_32.h
floppy_64.h
fpumacro.h
ftrace.h ftrace: Format MCOUNT_ADDR address as type unsigned long 2015-07-20 22:30:53 -04:00
futex.h
futex_32.h
futex_64.h
hardirq.h
hardirq_32.h
hardirq_64.h
head.h
head_32.h sparc32: drop hardcoding trap_level in kgdb_trap 2016-05-20 17:55:41 -07:00
head_64.h sparc64: Fix return from trap window fill crashes. 2016-05-29 18:55:54 -07:00
hibernate.h
highmem.h
hugetlb.h mm/hugetlb: remove arch_prepare/release_hugepage from arch headers 2015-06-25 17:00:35 -07:00
hvtramp.h
hw_irq.h
hypervisor.h sparc: perf: Add support M7 processor 2015-03-19 18:54:49 -07:00
ide.h
idprom.h
intr_queue.h
io-unit.h
io.h sparc: io: remove duplicate relaxed accessors on sparc32 2014-11-19 10:19:45 +01:00
io_32.h arch/*/io.h: Add ioremap_wt() to all architectures 2015-06-07 15:28:57 +02:00
io_64.h arch/*/io.h: Add ioremap_wt() to all architectures 2015-06-07 15:28:57 +02:00
ioctls.h
iommu.h
iommu_32.h
iommu_64.h sparc: Make sparc64 use scalable lib/iommu-common.c functions 2015-04-18 12:32:59 -07:00
irq.h
irq_32.h
irq_64.h
irqflags.h
irqflags_32.h
irqflags_64.h
jump_label.h locking/static_keys: Add a new static_key interface 2015-08-03 11:34:15 +02:00
Kbuild locking/rwsem, sparc: Drop superfluous arch specific implementation 2016-04-13 10:42:19 +02:00
kdebug.h
kdebug_32.h
kdebug_64.h
kgdb.h sparc32: drop hardcoding trap_level in kgdb_trap 2016-05-20 17:55:41 -07:00
kmap_types.h
kprobes.h
ldc.h sparc/ldc: create separate ldc_unbind from ldc_free 2014-12-11 18:52:45 -08:00
leon.h
leon_amba.h
leon_pci.h
lsu.h
machines.h
mbus.h
mc146818rtc.h
mc146818rtc_32.h
mc146818rtc_64.h
mdesc.h
memctrl.h
mman.h
mmu.h
mmu_32.h
mmu_64.h
mmu_context.h
mmu_context_32.h
mmu_context_64.h
mmzone.h
msi.h
mxcc.h
nmi.h
ns87303.h
obio.h sparc: Convert naked unsigned uses to unsigned int 2016-03-20 21:28:58 -07:00
openprom.h sparc: Convert naked unsigned uses to unsigned int 2016-03-20 21:28:58 -07:00
oplib.h
oplib_32.h
oplib_64.h
page.h
page_32.h sparc32: fix build with STRICT_MM_TYPECHECKS 2016-05-20 17:55:42 -07:00
page_64.h
parport.h
pbm.h
pci.h PCI: Move pci_dma_* helpers to common code 2016-03-07 10:40:02 -06:00
pci_32.h PCI: Remove unused pci_dma_burst_advice() 2015-06-08 07:56:43 -05:00
pci_64.h PCI: Remove unused pci_dma_burst_advice() 2015-06-08 07:56:43 -05:00
pcic.h
pcr.h
percpu.h
percpu_32.h
percpu_64.h
perf_event.h
pgalloc.h
pgalloc_32.h sparc32: drop superfluous cast in calls to __nocache_pa() 2016-05-20 17:55:42 -07:00
pgalloc_64.h
pgtable.h
pgtable_32.h sparc32: fix build with STRICT_MM_TYPECHECKS 2016-05-20 17:55:42 -07:00
pgtable_64.h Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc 2016-05-22 19:24:13 -07:00
pgtsrmmu.h sparc: drop pte_file()-related helpers 2015-02-10 14:30:33 -08:00
pil.h
processor.h sparc: reuse asm-generic/barrier.h 2016-01-12 20:46:49 +02:00
processor_32.h
processor_64.h sparc: Fix misspellings in comments. 2016-03-20 21:28:58 -07:00
prom.h
psr.h
ptrace.h
ross.h
sbi.h
scratchpad.h
seccomp.h sparc: switch to using asm-generic for seccomp.h 2015-04-17 09:04:10 -04:00
sections.h
setup.h
sfafsr.h
sfp-machine.h
sfp-machine_32.h
sfp-machine_64.h
shmparam.h
shmparam_32.h
shmparam_64.h
sigcontext.h sparc: Convert naked unsigned uses to unsigned int 2016-03-20 21:28:58 -07:00
siginfo.h
signal.h
smp.h
smp_32.h
smp_64.h
sparsemem.h
spinlock.h
spinlock_32.h locking/spinlock, arch: Update and fix spin_unlock_wait() implementations 2016-06-14 11:55:15 +02:00
spinlock_64.h locking/spinlock, arch: Update and fix spin_unlock_wait() implementations 2016-06-14 11:55:15 +02:00
spinlock_types.h
spitfire.h sparc64: recognize and support Sonoma CPU type 2016-04-21 16:43:47 -04:00
stacktrace.h
starfire.h arch: sparc: kernel: starfire.c: Remove unused function 2015-03-01 21:33:58 -08:00
string.h
string_32.h
string_64.h
sunbpp.h
swift.h
switch_to.h
switch_to_32.h
switch_to_64.h
syscall.h sparc/syscall: fix syscall_get_arch 2016-03-22 15:36:02 -07:00
syscalls.h
termbits.h
termios.h
thread_info.h
thread_info_32.h sparc: Fix execution domain removal 2015-04-12 21:03:31 +02:00
thread_info_64.h sparc: Remove signal translation and exec_domain 2015-04-12 21:03:21 +02:00
timer.h
timer_32.h
timer_64.h
timex.h
timex_32.h
timex_64.h
tlb.h
tlb_32.h
tlb_64.h
tlbflush.h
tlbflush_32.h
tlbflush_64.h sparc64: Reduce TLB flushes during hugepte changes 2016-05-20 18:44:27 -07:00
topology.h
topology_32.h
topology_64.h sparc64: Fix numa distance values 2015-11-04 12:14:49 -08:00
trap_block.h sparc: Resolve conflict between sparc v9 and M7 on usage of bit 9 of TTE 2015-05-31 22:15:01 -07:00
traps.h
tsb.h sparc: Fix misspellings in comments. 2016-03-20 21:28:58 -07:00
tsunami.h
ttable.h sparc64: Fix return from trap window fill crashes. 2016-05-29 18:55:54 -07:00
turbosparc.h
uaccess.h
uaccess_32.h put the remnants of ..._user_ret() to rest 2016-01-04 10:28:06 -05:00
uaccess_64.h put the remnants of ..._user_ret() to rest 2016-01-04 10:28:06 -05:00
unaligned.h
unistd.h
upa.h
user.h
vaddrs.h
vga.h
viking.h
vio.h vio: create routines for inc,dec vio dring indexes 2014-12-11 18:52:45 -08:00
visasm.h sparc64: Fix userspace FPU register corruptions. 2015-08-06 19:13:25 -07:00
winmacro.h
xor.h
xor_32.h
xor_64.h