Lines Matching refs:owner
180 pr("owner/count : %#018lx flags : %#018x\n",
244 * Return true if an rwlock owner is running on a CPU in the system.
249 rw_oncpu(uintptr_t owner)
257 if ((owner & (RW_WRITE_LOCKED|RW_HAS_WAITERS)) != RW_WRITE_LOCKED) {
265 l = (lwp_t *)(owner & RW_THREAD);
285 uintptr_t owner, incr, need_wait, set_wait, curthread, next;
310 * set the owner field and the WRITE_LOCKED bit.
332 for (owner = rw->rw_owner;;) {
334 * Read the lock owner field. If the need-to-wait
337 if ((owner & need_wait) == 0) {
338 next = rw_cas(rw, owner, (owner + incr) &
340 if (__predict_true(next == owner)) {
350 owner = next;
358 * If the lock owner is running on another CPU, and
361 if (rw_oncpu(owner)) {
368 owner = rw->rw_owner;
369 } while (rw_oncpu(owner));
372 if ((owner & need_wait) == 0)
388 owner = rw->rw_owner;
389 if ((owner & need_wait) == 0 || rw_oncpu(owner)) {
393 next = rw_cas(rw, owner, owner | set_wait);
395 if (__predict_false(next != owner)) {
397 owner = next;
413 owner = rw->rw_owner;
439 uintptr_t curthread, owner, decr, newown, next;
454 owner = rw->rw_owner;
455 if (__predict_false((owner & RW_WRITE_LOCKED) != 0)) {
472 newown = (owner - decr);
475 next = rw_cas(rw, owner, newown);
476 if (__predict_true(next == owner))
478 owner = next;
487 owner = rw->rw_owner;
489 RW_ASSERT(rw, (owner & RW_HAS_WAITERS) != 0);
507 RW_ASSERT(rw, (owner & RW_WRITE_WANTED) != 0);
512 newown = (uintptr_t)l | (owner & RW_NODEBUG);
516 rw_swap(rw, owner, newown);
520 newown = owner & RW_NODEBUG;
522 rw_swap(rw, owner, newown);
533 newown = owner & RW_NODEBUG;
539 rw_swap(rw, owner, newown);
552 uintptr_t curthread, owner, incr, need_wait, next;
569 for (owner = rw->rw_owner;; owner = next) {
570 if (__predict_false((owner & need_wait) != 0))
572 next = rw_cas(rw, owner, owner + incr);
573 if (__predict_true(next == owner)) {
596 uintptr_t owner, newown, next, curthread __diagused;
609 for (owner = rw->rw_owner;; owner = next) {
616 if ((owner & RW_HAS_WAITERS) == 0) {
617 newown = (owner & RW_NODEBUG);
618 next = rw_cas(rw, owner, newown + RW_READ_INCR);
619 if (__predict_true(next == owner)) {
650 newown = owner & RW_NODEBUG;
653 next = rw_cas(rw, owner, newown);
655 if (__predict_true(next == owner))
664 newown = owner & RW_NODEBUG;
669 next = rw_cas(rw, owner, newown);
670 if (__predict_true(next == owner)) {
694 uintptr_t owner, curthread, newown, next;
702 for (owner = RW_READ_INCR;; owner = next) {
703 newown = curthread | RW_WRITE_LOCKED | (owner & ~RW_THREAD);
704 next = rw_cas(rw, owner, newown);
705 if (__predict_true(next == owner)) {
735 uintptr_t owner;
739 owner = rw->rw_owner;
740 return (owner & RW_WRITE_LOCKED) == 0 && (owner & RW_THREAD) != 0;
794 * Return the current owner of an RW lock, but only if it is write
801 uintptr_t owner = rw->rw_owner;
803 if ((owner & RW_WRITE_LOCKED) == 0)
806 return (void *)(owner & RW_THREAD);