Lines Matching refs: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;
277 rw_enter_sleep(rwlock_impl_t *lp, krw_t rw)
300 if (((old = lp->rw_wwwh) & lock_busy) == 0) {
301 if (casip(&lp->rw_wwwh, old, old + lock_value) != old) {
319 rw_panic("rw_enter: bad rwlock", lp);
324 rw_panic("recursive rw_enter", lp);
328 ts = turnstile_lookup(lp);
331 if (((old = lp->rw_wwwh) & lock_busy) == 0)
334 } while (old != new && casip(&lp->rw_wwwh, old, new) != old);
340 turnstile_exit(lp);
348 ASSERT(lp->rw_wwwh & lock_wait);
349 ASSERT(lp->rw_wwwh & RW_LOCKED);
355 (void) turnstile_block(ts, TS_READER_Q, lp,
359 (void) turnstile_block(ts, TS_WRITER_Q, lp,
364 LOCKSTAT_RECORD4(LS_RW_ENTER_BLOCK, lp, sleep_time, rw,
375 ASSERT(rw_locked(lp, rw));
379 LOCKSTAT_RECORD(LS_RW_ENTER_ACQUIRE, lp, rw);
411 rw_exit_wakeup(rwlock_impl_t *lp)
422 old = lp->rw_wwwh;
425 rw_panic("rw_exit: not owner", lp);
426 lp->rw_wwwh = 0;
432 rw_panic("rw_exit: lock not held", lp);
443 old = lp->rw_wwwh;
446 if (casip(&lp->rw_wwwh, old, new) != old) {
474 if (casip(&lp->rw_wwwh, old, new) != old)
481 ts = turnstile_lookup(lp);
496 lp->rw_wwwh = new;
512 ASSERT(lp->rw_wwwh & RW_WRITE_WANTED);
518 lp->rw_wwwh = new;
527 LOCKSTAT_RECORD(LS_RW_EXIT_RELEASE, lp, RW_READER);
529 LOCKSTAT_RECORD(LS_RW_EXIT_RELEASE, lp, RW_WRITER);
536 rwlock_impl_t *lp = (rwlock_impl_t *)rwlp;
544 if ((old = lp->rw_wwwh) & (rw == RW_READER ?
549 if (casip(&lp->rw_wwwh, old, old + RW_READ_LOCK) == old)
560 LOCKSTAT_RECORD(LS_RW_TRYENTER_ACQUIRE, lp, rw);
562 if (casip(&lp->rw_wwwh, 0, RW_WRITE_LOCK(curthread)) != 0)
564 LOCKSTAT_RECORD(LS_RW_TRYENTER_ACQUIRE, lp, rw);
566 ASSERT(rw_locked(lp, rw));
574 rwlock_impl_t *lp = (rwlock_impl_t *)rwlp;
579 if ((lp->rw_wwwh & RW_OWNER) != (uintptr_t)curthread) {
580 rw_panic("rw_downgrade: not owner", lp);
584 if (atomic_add_ip_nv(&lp->rw_wwwh,
586 turnstile_t *ts = turnstile_lookup(lp);
592 atomic_add_ip(&lp->rw_wwwh, delta);
596 ASSERT(rw_locked(lp, RW_READER));
597 LOCKSTAT_RECORD0(LS_RW_DOWNGRADE_DOWNGRADE, lp);
603 rwlock_impl_t *lp = (rwlock_impl_t *)rwlp;
606 ASSERT(rw_locked(lp, RW_READER));
609 if (((old = lp->rw_wwwh) & ~RW_HAS_WAITERS) != RW_READ_LOCK)
612 } while (casip(&lp->rw_wwwh, old, new) != old);
616 LOCKSTAT_RECORD0(LS_RW_TRYUPGRADE_UPGRADE, lp);
617 ASSERT(rw_locked(lp, RW_WRITER));