locking/spinlock, arch: Update and fix spin_unlock_wait() implementations
[cascardo/linux.git] / arch / arc / include / asm / spinlock.h
index cded4a9..233d5ff 100644 (file)
 
 #define arch_spin_is_locked(x) ((x)->slock != __ARCH_SPIN_LOCK_UNLOCKED__)
 #define arch_spin_lock_flags(lock, flags)      arch_spin_lock(lock)
-#define arch_spin_unlock_wait(x) \
-       do { while (arch_spin_is_locked(x)) cpu_relax(); } while (0)
+
+static inline void arch_spin_unlock_wait(arch_spinlock_t *lock)
+{
+       smp_cond_load_acquire(&lock->slock, !VAL);
+}
 
 #ifdef CONFIG_ARC_HAS_LLSC