Lines Matching defs:lp
215 rw_panic(char *msg, rwlock_impl_t *lp)
220 if (atomic_cas_ptr(&panic_rwlock_addr, NULL, lp) == NULL)
221 panic_rwlock = *lp;
223 panic("%s, lp=%p wwwh=%lx thread=%p",
224 msg, (void *)lp, panic_rwlock.rw_wwwh, (void *)curthread);
237 rwlock_impl_t *lp = (rwlock_impl_t *)rwlp;
239 if (lp->rw_wwwh != 0) {
240 if ((lp->rw_wwwh & RW_DOUBLE_LOCK) == RW_DOUBLE_LOCK)
241 rw_panic("rw_destroy: lock already destroyed", lp);
243 rw_panic("rw_destroy: lock still active", lp);
246 lp->rw_wwwh = RW_DOUBLE_LOCK;
253 rw_locked(rwlock_impl_t *lp, krw_t rw)
255 uintptr_t old = lp->rw_wwwh;
274 rw_enter_sleep(rwlock_impl_t *lp, krw_t rw)
297 if (((old = lp->rw_wwwh) & lock_busy) == 0) {
298 if (casip(&lp->rw_wwwh, old, old + lock_value) != old) {
316 rw_panic("rw_enter: bad rwlock", lp);
321 rw_panic("recursive rw_enter", lp);
325 ts = turnstile_lookup(lp);
328 if (((old = lp->rw_wwwh) & lock_busy) == 0)
331 } while (old != new && casip(&lp->rw_wwwh, old, new) != old);
337 turnstile_exit(lp);
344 ASSERT(lp->rw_wwwh & lock_wait);
345 ASSERT(lp->rw_wwwh & RW_LOCKED);
350 (void) turnstile_block(ts, TS_READER_Q, lp,
354 (void) turnstile_block(ts, TS_WRITER_Q, lp,
359 LOCKSTAT_RECORD4(LS_RW_ENTER_BLOCK, lp, sleep_time, rw,
370 ASSERT(rw_locked(lp, rw));
374 LOCKSTAT_RECORD(LS_RW_ENTER_ACQUIRE, lp, rw);
405 rw_exit_wakeup(rwlock_impl_t *lp)
416 old = lp->rw_wwwh;
419 rw_panic("rw_exit: not owner", lp);
420 lp->rw_wwwh = 0;
426 rw_panic("rw_exit: lock not held", lp);
437 old = lp->rw_wwwh;
440 if (casip(&lp->rw_wwwh, old, new) != old) {
468 if (casip(&lp->rw_wwwh, old, new) != old)
475 ts = turnstile_lookup(lp);
490 lp->rw_wwwh = new;
506 ASSERT(lp->rw_wwwh & RW_WRITE_WANTED);
512 lp->rw_wwwh = new;
520 LOCKSTAT_RECORD(LS_RW_EXIT_RELEASE, lp, RW_READER);
522 LOCKSTAT_RECORD(LS_RW_EXIT_RELEASE, lp, RW_WRITER);
529 rwlock_impl_t *lp = (rwlock_impl_t *)rwlp;
536 if ((old = lp->rw_wwwh) & (rw == RW_READER ?
540 if (casip(&lp->rw_wwwh, old, old + RW_READ_LOCK) == old)
551 LOCKSTAT_RECORD(LS_RW_TRYENTER_ACQUIRE, lp, rw);
553 if (casip(&lp->rw_wwwh, 0, RW_WRITE_LOCK(curthread)) != 0)
555 LOCKSTAT_RECORD(LS_RW_TRYENTER_ACQUIRE, lp, rw);
557 ASSERT(rw_locked(lp, rw));
565 rwlock_impl_t *lp = (rwlock_impl_t *)rwlp;
569 if ((lp->rw_wwwh & RW_OWNER) != (uintptr_t)curthread) {
570 rw_panic("rw_downgrade: not owner", lp);
574 if (atomic_add_ip_nv(&lp->rw_wwwh,
576 turnstile_t *ts = turnstile_lookup(lp);
582 atomic_add_ip(&lp->rw_wwwh, delta);
586 ASSERT(rw_locked(lp, RW_READER));
587 LOCKSTAT_RECORD0(LS_RW_DOWNGRADE_DOWNGRADE, lp);
593 rwlock_impl_t *lp = (rwlock_impl_t *)rwlp;
596 ASSERT(rw_locked(lp, RW_READER));
599 if (((old = lp->rw_wwwh) & ~RW_HAS_WAITERS) != RW_READ_LOCK)
602 } while (casip(&lp->rw_wwwh, old, new) != old);
605 LOCKSTAT_RECORD0(LS_RW_TRYUPGRADE_UPGRADE, lp);
606 ASSERT(rw_locked(lp, RW_WRITER));