Lines Matching refs:l

59 smbfs_rw_enter_sig(smbfs_rwlock_t *l, krw_t rw, int intr)  in smbfs_rw_enter_sig()  argument
62 mutex_enter(&l->lock); in smbfs_rw_enter_sig()
68 if (l->owner == curthread) { in smbfs_rw_enter_sig()
71 l->count--; in smbfs_rw_enter_sig()
79 while (l->count < 0 || l->waiters > 0) { in smbfs_rw_enter_sig()
82 (void) cv_wait_sig(&l->cv, &l->lock); in smbfs_rw_enter_sig()
84 cv_wait(&l->cv, &l->lock); in smbfs_rw_enter_sig()
86 ASSERT(l->count < INT_MAX); in smbfs_rw_enter_sig()
88 if ((l->count % 10000) == 9999) in smbfs_rw_enter_sig()
90 "rwlock @ %p\n", l->count, (void *)&l); in smbfs_rw_enter_sig()
92 l->count++; in smbfs_rw_enter_sig()
103 while (l->count > 0 || l->owner != NULL) { in smbfs_rw_enter_sig()
104 l->waiters++; in smbfs_rw_enter_sig()
107 if (!cv_wait_sig(&l->cv, &l->lock)) { in smbfs_rw_enter_sig()
108 l->waiters--; in smbfs_rw_enter_sig()
109 cv_broadcast(&l->cv); in smbfs_rw_enter_sig()
110 mutex_exit(&l->lock); in smbfs_rw_enter_sig()
114 cv_wait(&l->cv, &l->lock); in smbfs_rw_enter_sig()
115 l->waiters--; in smbfs_rw_enter_sig()
117 l->owner = curthread; in smbfs_rw_enter_sig()
118 l->count--; in smbfs_rw_enter_sig()
121 mutex_exit(&l->lock); in smbfs_rw_enter_sig()
132 smbfs_rw_tryenter(smbfs_rwlock_t *l, krw_t rw) in smbfs_rw_tryenter() argument
134 mutex_enter(&l->lock); in smbfs_rw_tryenter()
140 if (l->owner == curthread) { in smbfs_rw_tryenter()
143 l->count--; in smbfs_rw_tryenter()
149 if (l->count < 0 || l->waiters > 0) { in smbfs_rw_tryenter()
150 mutex_exit(&l->lock); in smbfs_rw_tryenter()
153 l->count++; in smbfs_rw_tryenter()
161 if (l->count > 0 || l->owner != NULL) { in smbfs_rw_tryenter()
162 mutex_exit(&l->lock); in smbfs_rw_tryenter()
165 l->owner = curthread; in smbfs_rw_tryenter()
166 l->count--; in smbfs_rw_tryenter()
169 mutex_exit(&l->lock); in smbfs_rw_tryenter()
175 smbfs_rw_exit(smbfs_rwlock_t *l) in smbfs_rw_exit() argument
178 mutex_enter(&l->lock); in smbfs_rw_exit()
191 if (l->owner != NULL) { in smbfs_rw_exit()
192 ASSERT(l->owner == curthread); in smbfs_rw_exit()
193 l->count++; in smbfs_rw_exit()
194 if (l->count == 0) { in smbfs_rw_exit()
195 l->owner = NULL; in smbfs_rw_exit()
196 cv_broadcast(&l->cv); in smbfs_rw_exit()
199 ASSERT(l->count > 0); in smbfs_rw_exit()
200 l->count--; in smbfs_rw_exit()
201 if (l->count == 0 && l->waiters > 0) in smbfs_rw_exit()
202 cv_broadcast(&l->cv); in smbfs_rw_exit()
204 mutex_exit(&l->lock); in smbfs_rw_exit()
208 smbfs_rw_lock_held(smbfs_rwlock_t *l, krw_t rw) in smbfs_rw_lock_held() argument
212 return (l->count > 0); in smbfs_rw_lock_held()
214 return (l->count < 0); in smbfs_rw_lock_held()
219 smbfs_rw_init(smbfs_rwlock_t *l, char *name, krw_type_t type, void *arg) in smbfs_rw_init() argument
222 l->count = 0; in smbfs_rw_init()
223 l->waiters = 0; in smbfs_rw_init()
224 l->owner = NULL; in smbfs_rw_init()
225 mutex_init(&l->lock, NULL, MUTEX_DEFAULT, NULL); in smbfs_rw_init()
226 cv_init(&l->cv, NULL, CV_DEFAULT, NULL); in smbfs_rw_init()
230 smbfs_rw_destroy(smbfs_rwlock_t *l) in smbfs_rw_destroy() argument
233 mutex_destroy(&l->lock); in smbfs_rw_destroy()
234 cv_destroy(&l->cv); in smbfs_rw_destroy()