atomic_try_cmpxchg_release
if (atomic_try_cmpxchg_release(&lock->tail, &curr, OSQ_UNLOCKED_VAL))
if (!atomic_try_cmpxchg_release(&ref->refcnt, &cnt, RCUREF_DEAD))
return atomic_try_cmpxchg_release(&r->refs, &val, 0);
} while (!atomic_try_cmpxchg_release(&r->refs, &val, new));
return atomic_try_cmpxchg_release(v, old, new);