These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / arch / tile / include / asm / spinlock_32.h
index c0a77b3..b14b1ba 100644 (file)
@@ -41,8 +41,12 @@ static inline int arch_spin_is_locked(arch_spinlock_t *lock)
         * to claim the lock is held, since it will be momentarily
         * if not already.  There's no need to wait for a "valid"
         * lock->next_ticket to become available.
+        * Use READ_ONCE() to ensure that calling this in a loop is OK.
         */
-       return lock->next_ticket != lock->current_ticket;
+       int curr = READ_ONCE(lock->current_ticket);
+       int next = READ_ONCE(lock->next_ticket);
+
+       return next != curr;
 }
 
 void arch_spin_lock(arch_spinlock_t *lock);