pv_hold
u_int pv_hold; /* interlock action */
(pvp->pv_hold & PV_HOLD_MASK) == 2 &&
atomic_add_int(&pv->pv_hold, 1);
count = pv->pv_hold;
static void pv_hold(pv_entry_t pv);
if (atomic_fcmpset_int(&pv->pv_hold, &count,
if (atomic_fcmpset_int(&pv->pv_hold, &count, count + 1))
count = pv->pv_hold;
if (atomic_cmpset_int(&pv->pv_hold, count, count - 1)) {
pnew->pv_hold = PV_HOLD_LOCKED | 2;
count = pv->pv_hold;
if (atomic_cmpset_int(&pv->pv_hold, count,
if (atomic_cmpset_int(&pv->pv_hold, count,
count = pv->pv_hold;
if (atomic_cmpset_int(&pv->pv_hold, count,
kprintf("pv_put pv=%p hold=%08x\n", pv, pv->pv_hold);
if (atomic_cmpset_int(&pv->pv_hold, PV_HOLD_LOCKED | 2, 1))
KKASSERT((pv->pv_hold & (PV_HOLD_LOCKED|PV_HOLD_MASK)) >=
if (atomic_cmpset_int(&pv->pv_hold, PV_HOLD_LOCKED | 2, 0)) {