do { membar("#LoadLoad"); \
} while(*((volatile unsigned char *)lock))
-/* arch/sparc64/lib/spinlock.S */
-extern void _raw_spin_lock(spinlock_t *lock);
+static __inline__ void _raw_spin_lock(spinlock_t *lock)
+{
+ __asm__ __volatile__(
+"1: ldstub [%0], %%g7\n"
+" brnz,pn %%g7, 2f\n"
+" membar #StoreLoad | #StoreStore\n"
+" .subsection 2\n"
+"2: ldub [%0], %%g7\n"
+" brnz,pt %%g7, 2b\n"
+" membar #LoadLoad\n"
+" b,a,pt %%xcc, 1b\n"
+" .previous\n"
+ : /* no outputs */
+ : "r" (lock)
+ : "g7", "memory");
+}
static __inline__ int _raw_spin_trylock(spinlock_t *lock)
{