Home | History | Annotate | Download | only in kern

Lines Matching defs:ro

58 	struct krwobj *ro;
60 ro = kmem_intr_alloc(sizeof(*ro), KM_SLEEP);
61 KASSERT(ALIGNED_POINTER(ro, coherency_unit));
62 _rw_init(&ro->ro_lock, (uintptr_t)__builtin_return_address(0));
63 ro->ro_magic = RW_OBJ_MAGIC;
64 ro->ro_refcnt = 1;
66 return (krwlock_t *)ro;
77 struct krwobj *ro;
79 ro = kmem_intr_alloc(sizeof(*ro), KM_NOSLEEP);
80 KASSERT(ALIGNED_POINTER(ro, coherency_unit));
81 if (__predict_true(ro != NULL)) {
82 _rw_init(&ro->ro_lock, (uintptr_t)__builtin_return_address(0));
83 ro->ro_magic = RW_OBJ_MAGIC;
84 ro->ro_refcnt = 1;
87 return (krwlock_t *)ro;
99 struct krwobj *ro = (struct krwobj *)lock;
101 KASSERT(ro->ro_magic == RW_OBJ_MAGIC);
102 KASSERT(ro->ro_refcnt > 0);
104 atomic_inc_uint(&ro->ro_refcnt);
116 struct krwobj *ro = (struct krwobj *)lock;
118 KASSERT(ro->ro_magic == RW_OBJ_MAGIC);
119 KASSERT(ro->ro_refcnt > 0);
122 if (atomic_dec_uint_nv(&ro->ro_refcnt) > 0) {
126 rw_destroy(&ro->ro_lock);
127 kmem_intr_free(ro, sizeof(*ro));
139 struct krwobj *ro = (struct krwobj *)lock;
141 return ro->ro_refcnt;