PLOCK_ZOMB
KKASSERT((p->p_lock & (PLOCK_ZOMB | PLOCK_WAITRES)) == PLOCK_ZOMB);
if (atomic_cmpset_int(&p->p_lock, 0, PLOCK_ZOMB | 1))
if ((o & (PLOCK_ZOMB | PLOCK_WAITRES)) == 0) {
n = (o + 1) | PLOCK_ZOMB;
if (atomic_cmpset_int(&p->p_lock, PLOCK_ZOMB | 1, 0))
KKASSERT(p->p_lock & PLOCK_ZOMB);
n = (o - 1) & ~(PLOCK_ZOMB | PLOCK_WAITING | PLOCK_WAITRES);