On Wed, Feb 22, 2017 at 12:41:17PM +0100, Peter Zijlstra wrote: > On Wed, Feb 22, 2017 at 04:11:39AM +0900, Stafford Horne wrote: > > +static inline void arch_spin_unlock(arch_spinlock_t *lock) > > +{ > > + smp_mb(); > > + lock->tickets.owner++; > > +} > > This is putting a lot of trust in the compiler, nothing is volatile so > it can do horrible things.
Also, your architecture manual seems to not explicitly mention how l.lwa/l.swa interact with overlapping l.sh. In fact, I can read the text such that its done 'wrong'.