add working a_spin() atomic for non-x86 targets
authorRich Felker <dalias@aerifal.cx>
Mon, 25 Aug 2014 19:43:40 +0000 (15:43 -0400)
committerRich Felker <dalias@aerifal.cx>
Mon, 25 Aug 2014 19:43:40 +0000 (15:43 -0400)
commitea818ea8340c13742a4f41e6077f732291aea4bc
treef2a97e8f8a25fc3337002aa30bb235575593af86
parent5345c9b884e7c4e73eb2c8bb83b8d0df20f95afb
add working a_spin() atomic for non-x86 targets

conceptually, a_spin needs to be at least a compiler barrier, so the
compiler will not optimize out loops (and the load on each iteration)
while spinning. it should also be a memory barrier, or the spinning
thread might keep spinning without noticing stores from other threads,
thus delaying for longer than it should.

ideally, an optimal a_spin implementation that avoids unnecessary
cache/memory contention should be chosen for each arch, but for now,
the easiest thing is to perform a useless a_cas on the calling
thread's stack.
arch/arm/atomic.h
arch/microblaze/atomic.h
arch/mips/atomic.h
arch/or1k/atomic.h
arch/powerpc/atomic.h
arch/sh/atomic.h