From: Mikael Pettersson <mikpe@xxxxxxxx> Date: Mon, 15 Aug 2011 22:11:50 +0200 > The sparc32 version of arch_write_unlock() is just a plain assignment. > Unfortunately this allows the compiler to schedule side-effects in a > protected region to occur after the HW-level unlock, which is broken. > E.g., the following trivial test case gets miscompiled: > > #include <linux/spinlock.h> > rwlock_t lock; > int counter; > void foo(void) { write_lock(&lock); ++counter; write_unlock(&lock); } > > Fixed by adding a compiler memory barrier to arch_write_unlock(). The > sparc64 version combines the barrier and assignment into a single asm(), > and implements the operation as a static inline, so that's what I did too. > > Compile-tested with sparc32_defconfig + CONFIG_SMP=y. > > Signed-off-by: Mikael Pettersson <mikpe@xxxxxxxx> Applied. -- To unsubscribe from this list: send the line "unsubscribe sparclinux" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html