kernel: Fix ABA problem in try_acquire_read_spinlock()

This commit is contained in:
Pawel Dziepak
2014-01-06 21:03:42 +01:00
parent bae6d7196a
commit 4ca31ac964
2 changed files with 2 additions and 9 deletions
+1 -4
View File
@@ -210,10 +210,7 @@ static inline bool
try_acquire_read_spinlock_inline(rw_spinlock* lock) try_acquire_read_spinlock_inline(rw_spinlock* lock)
{ {
uint32 previous = atomic_add(&lock->lock, 1); uint32 previous = atomic_add(&lock->lock, 1);
if ((previous & (1u << 31)) == 0) return (previous & (1u << 31)) == 0;
return true;
atomic_test_and_set(&lock->lock, 1u << 31, previous);
return false;
} }
+1 -5
View File
@@ -617,11 +617,7 @@ try_acquire_read_spinlock(rw_spinlock* lock)
#endif #endif
uint32 previous = atomic_add(&lock->lock, 1); uint32 previous = atomic_add(&lock->lock, 1);
if ((previous & (1u << 31)) == 0) return (previous & (1u << 31)) == 0;
return true;
atomic_test_and_set(&lock->lock, 1u << 31, previous);
return false;
} }