SPINLOCK_SHARED
if (atomic_cmpset_int(&spin->lock, SPINLOCK_SHARED|0, 1))
if (value == (SPINLOCK_SHARED | 1) - 1) {
if (atomic_cmpset_int(&spin->lock, SPINLOCK_SHARED | 1, 1))
if (ovalue & SPINLOCK_SHARED) {
atomic_clear_int(&spin->lock, SPINLOCK_SHARED);
ovalue &= ~SPINLOCK_SHARED;
~SPINLOCK_SHARED;
ovalue | SPINLOCK_SHARED | 1)) {
SPINLOCK_SHARED | 1)) {
if (ovalue & SPINLOCK_SHARED) {
if (ovalue & SPINLOCK_SHARED)
if (__predict_false((lock & SPINLOCK_SHARED) == 0)) {
!atomic_cmpset_int(&spin->lock, 1, SPINLOCK_SHARED | 1)) {
if (atomic_cmpset_int(&spin->lock, SPINLOCK_SHARED|1, 1))
return((spin->lock & ~SPINLOCK_SHARED) != 0);