LK_UNLOCKED
if (lockmgr_read_value(lk) == LK_UNLOCKED &&
atomic_cmpset_acq_ptr(&lk->lk_lock, LK_UNLOCKED, tid)) {
if (x == tid && atomic_cmpset_rel_ptr(&lk->lk_lock, tid, LK_UNLOCKED))
v = LK_UNLOCKED;
if (atomic_cmpset_acq_ptr(&lk->lk_lock, LK_UNLOCKED, tid)) {
if (x == tid && atomic_cmpset_rel_ptr(&lk->lk_lock, tid, LK_UNLOCKED)) {
if (lk->lk_lock == LK_UNLOCKED &&
atomic_cmpset_acq_ptr(&lk->lk_lock, LK_UNLOCKED, tid))
if (x == LK_UNLOCKED) {
if ((x & ~v) == LK_UNLOCKED) {
if (lk->lk_lock == LK_UNLOCKED)
} else if (x == LK_UNLOCKED)
if (lk->lk_lock == LK_UNLOCKED ||
if (lk->lk_lock == LK_UNLOCKED)
v = LK_UNLOCKED;
lk->lk_lock = LK_UNLOCKED;
KASSERT(lk->lk_lock == LK_UNLOCKED, ("lockmgr still held"));
MPASS(x != LK_UNLOCKED);
CTASSERT(LK_UNLOCKED == (LK_UNLOCKED &
MPASS(x != LK_UNLOCKED);
if (x == LK_UNLOCKED) {
x = LK_UNLOCKED;
if (x == LK_UNLOCKED) {
if (x == LK_UNLOCKED) {
if ((x & ~v) == LK_UNLOCKED) {