rw_owner
db_read_bytes((db_addr_t)&rw->rw_owner, sizeof(owner),
static lwp_t *rw_owner(wchan_t);
.sobj_owner = rw_owner,
return (uintptr_t)atomic_cas_ptr((volatile void *)&rw->rw_owner,
n = (uintptr_t)atomic_swap_ptr((volatile void *)&rw->rw_owner,
rw->rw_owner = 0;
rw->rw_owner = RW_NODEBUG;
rw->rw_owner = 0;
RW_ASSERT(rw, (rw->rw_owner & ~RW_NODEBUG) == 0);
LOCKDEBUG_FREE((rw->rw_owner & RW_NODEBUG) == 0, rw);
for (owner = rw->rw_owner;;) {
owner = rw->rw_owner;
owner = rw->rw_owner;
if (op == RW_READER || (rw->rw_owner & RW_THREAD) == curthread)
owner = rw->rw_owner;
owner = rw->rw_owner;
owner = rw->rw_owner;
for (owner = rw->rw_owner;; owner = next) {
RW_ASSERT(rw, (rw->rw_owner & RW_WRITE_LOCKED) != 0);
for (owner = rw->rw_owner;; owner = next) {
(rw->rw_owner & RW_WRITE_LOCKED) == 0);
RW_ASSERT(rw, (rw->rw_owner & RW_WRITE_WANTED) != 0);
RW_ASSERT(rw, (rw->rw_owner & RW_HAS_WAITERS) != 0);
RW_ASSERT(rw, (rw->rw_owner & RW_WRITE_LOCKED) == 0);
RW_ASSERT(rw, rw->rw_owner & RW_WRITE_LOCKED);
owner = rw->rw_owner;
return (rw->rw_owner & (RW_WRITE_LOCKED | RW_THREAD)) ==
#define RW_DEBUG_P(rw) (((rw)->rw_owner & RW_NODEBUG) == 0)
return (rw->rw_owner & RW_THREAD) != 0;
return (rw->rw_owner & RW_WRITE_LOCKED) != 0 ? RW_WRITER : RW_READER;
uintptr_t owner = rw->rw_owner;
#define RW_OWNER(rw) ((rw)->rw_owner & RW_THREAD)
#define RW_COUNT(rw) ((rw)->rw_owner & RW_THREAD)
#define RW_FLAGS(rw) ((rw)->rw_owner & ~RW_THREAD)
volatile uintptr_t rw_owner;