Lines Matching defs:zrl

49 zrl_init(zrlock_t *zrl)
51 mutex_init(&zrl->zr_mtx, NULL, MUTEX_DEFAULT, NULL);
52 zrl->zr_refcount = 0;
53 cv_init(&zrl->zr_cv, NULL, CV_DEFAULT, NULL);
55 zrl->zr_owner = NULL;
56 zrl->zr_caller = NULL;
61 zrl_destroy(zrlock_t *zrl)
63 ASSERT(zrl->zr_refcount == 0);
65 mutex_destroy(&zrl->zr_mtx);
66 zrl->zr_refcount = ZRL_DESTROYED;
67 cv_destroy(&zrl->zr_cv);
72 zrl_add_debug(zrlock_t *zrl, const char *zc)
74 zrl_add(zrlock_t *zrl)
77 uint32_t n = (uint32_t)zrl->zr_refcount;
81 (uint32_t *)&zrl->zr_refcount, n, n + 1);
85 if (zrl->zr_owner == curthread) {
87 zrlock_t *, zrl, uint32_t, n);
89 zrl->zr_owner = curthread;
90 zrl->zr_caller = zc;
97 mutex_enter(&zrl->zr_mtx);
98 while (zrl->zr_refcount == ZRL_LOCKED) {
99 cv_wait(&zrl->zr_cv, &zrl->zr_mtx);
101 ASSERT(zrl->zr_refcount >= 0);
102 zrl->zr_refcount++;
104 zrl->zr_owner = curthread;
105 zrl->zr_caller = zc;
107 mutex_exit(&zrl->zr_mtx);
111 zrl_remove(zrlock_t *zrl)
115 n = atomic_dec_32_nv((uint32_t *)&zrl->zr_refcount);
118 if (zrl->zr_owner == curthread) {
119 zrl->zr_owner = NULL;
120 zrl->zr_caller = NULL;
126 zrl_tryenter(zrlock_t *zrl)
128 uint32_t n = (uint32_t)zrl->zr_refcount;
132 (uint32_t *)&zrl->zr_refcount, 0, ZRL_LOCKED);
135 ASSERT(zrl->zr_owner == NULL);
136 zrl->zr_owner = curthread;
148 zrl_exit(zrlock_t *zrl)
150 ASSERT(zrl->zr_refcount == ZRL_LOCKED);
152 mutex_enter(&zrl->zr_mtx);
154 ASSERT(zrl->zr_owner == curthread);
155 zrl->zr_owner = NULL;
158 zrl->zr_refcount = 0;
159 cv_broadcast(&zrl->zr_cv);
160 mutex_exit(&zrl->zr_mtx);
164 zrl_refcount(zrlock_t *zrl)
166 ASSERT(zrl->zr_refcount > ZRL_DESTROYED);
168 int n = (int)zrl->zr_refcount;
173 zrl_is_zero(zrlock_t *zrl)
175 ASSERT(zrl->zr_refcount > ZRL_DESTROYED);
177 return (zrl->zr_refcount <= 0);
181 zrl_is_locked(zrlock_t *zrl)
183 ASSERT(zrl->zr_refcount > ZRL_DESTROYED);
185 return (zrl->zr_refcount == ZRL_LOCKED);
190 zrl_owner(zrlock_t *zrl)
192 return (zrl->zr_owner);