_Q_LOCKED_VAL
if (val || !atomic_try_cmpxchg(&lock->val, &val, _Q_LOCKED_VAL)) {
return _Q_LOCKED_VAL | (smp_processor_id() << _Q_OWNER_CPU_OFFSET);
"i" (_Q_LOCKED_VAL),
BUG_ON(!(old & _Q_LOCKED_VAL));
BUG_ON(!(val & _Q_LOCKED_VAL));
if (val & _Q_LOCKED_VAL) {
if (unlikely(!(val & _Q_LOCKED_VAL))) {
if (!(val & _Q_LOCKED_VAL))
if (unlikely(old & _Q_LOCKED_VAL)) {
if (val || !atomic_try_cmpxchg(&lock->val, &val, _Q_LOCKED_VAL)) {
"mov $" __stringify(_Q_LOCKED_VAL) ",%eax\n\t" \
if (likely(atomic_try_cmpxchg_acquire(&lock->val, &val, _Q_LOCKED_VAL)))
return likely(atomic_try_cmpxchg_acquire(&lock->val, &val, _Q_LOCKED_VAL));
if (likely(atomic_try_cmpxchg_acquire(&lock->val, &val, _Q_LOCKED_VAL)))
if (atomic_try_cmpxchg_relaxed(&lock->val, &val, _Q_LOCKED_VAL))
if (atomic_try_cmpxchg_relaxed(&lock->val, &val, _Q_LOCKED_VAL))
WRITE_ONCE(lock->locked_pending, _Q_LOCKED_VAL);
atomic_add(-_Q_PENDING_VAL + _Q_LOCKED_VAL, &lock->val);
WRITE_ONCE(lock->locked, _Q_LOCKED_VAL);
try_cmpxchg_acquire(&lock->locked_pending, &old, _Q_LOCKED_VAL);
new = (old & ~_Q_PENDING_MASK) | _Q_LOCKED_VAL;
WRITE_ONCE(lock->locked, _Q_LOCKED_VAL);
return (u32)(atomic_read(&lock->val) | _Q_LOCKED_VAL);
u8 locked = _Q_LOCKED_VAL;
try_cmpxchg_acquire(&lock->locked, &old, _Q_LOCKED_VAL)) {
WRITE_ONCE(lock->locked_pending, _Q_LOCKED_VAL);
WRITE_ONCE(lock->locked, _Q_LOCKED_VAL);
return likely(atomic_try_cmpxchg_acquire(&lock->val, &val, _Q_LOCKED_VAL));
if (atomic_try_cmpxchg_relaxed(&lock->val, &val, _Q_LOCKED_VAL))
if (likely(atomic_try_cmpxchg_acquire(&lock->val, &val, _Q_LOCKED_VAL)))