RW_UNLOCKED
if ((v & ~setv) == RW_UNLOCKED) {
setv = RW_UNLOCKED;
if (rw->rw_lock == RW_UNLOCKED ||
if (rw->rw_lock == RW_UNLOCKED)
rw->rw_lock = RW_UNLOCKED;
KASSERT(rw->rw_lock == RW_UNLOCKED, ("rw lock %p not unlocked", rw));
v = RW_UNLOCKED;
v = RW_UNLOCKED;
if (v == RW_UNLOCKED)
setv = RW_UNLOCKED;
while (v == RW_UNLOCKED) {
if (__predict_false(v == RW_UNLOCKED))
if (v == RW_UNLOCKED) {
inp->inp_lock.rw_lock == RW_UNLOCKED)
uintptr_t _v = RW_UNLOCKED; \
atomic_cmpset_acq_ptr(&(rw)->rw_lock, RW_UNLOCKED, (tid))
atomic_cmpset_rel_ptr(&(rw)->rw_lock, (tid), RW_UNLOCKED)
atomic_fcmpset_rel_ptr(&(rw)->rw_lock, (tid), RW_UNLOCKED)