diff options
Diffstat (limited to 'arch/arc/include/asm/spinlock.h')
| -rw-r--r-- | arch/arc/include/asm/spinlock.h | 9 | 
1 files changed, 8 insertions, 1 deletions
diff --git a/arch/arc/include/asm/spinlock.h b/arch/arc/include/asm/spinlock.h index f158197ac5b..b6a8c2dfbe6 100644 --- a/arch/arc/include/asm/spinlock.h +++ b/arch/arc/include/asm/spinlock.h @@ -45,7 +45,14 @@ static inline int arch_spin_trylock(arch_spinlock_t *lock)  static inline void arch_spin_unlock(arch_spinlock_t *lock)  { -	lock->slock = __ARCH_SPIN_LOCK_UNLOCKED__; +	unsigned int tmp = __ARCH_SPIN_LOCK_UNLOCKED__; + +	__asm__ __volatile__( +	"	ex  %0, [%1]		\n" +	: "+r" (tmp) +	: "r"(&(lock->slock)) +	: "memory"); +  	smp_mb();  }  | 
