Lines Matching refs:cvp
66 __cv_init(kcondvar_t *cvp, char *name, kcv_type_t type, void *arg) in __cv_init() argument
68 ASSERT(cvp); in __cv_init()
73 cvp->cv_magic = CV_MAGIC; in __cv_init()
74 init_waitqueue_head(&cvp->cv_event); in __cv_init()
75 init_waitqueue_head(&cvp->cv_destroy); in __cv_init()
76 atomic_set(&cvp->cv_waiters, 0); in __cv_init()
77 atomic_set(&cvp->cv_refs, 1); in __cv_init()
78 cvp->cv_mutex = NULL; in __cv_init()
83 cv_destroy_wakeup(kcondvar_t *cvp) in cv_destroy_wakeup() argument
85 if (!atomic_read(&cvp->cv_waiters) && !atomic_read(&cvp->cv_refs)) { in cv_destroy_wakeup()
86 ASSERT(cvp->cv_mutex == NULL); in cv_destroy_wakeup()
87 ASSERT(!waitqueue_active(&cvp->cv_event)); in cv_destroy_wakeup()
95 __cv_destroy(kcondvar_t *cvp) in __cv_destroy() argument
97 ASSERT(cvp); in __cv_destroy()
98 ASSERT(cvp->cv_magic == CV_MAGIC); in __cv_destroy()
100 cvp->cv_magic = CV_DESTROY; in __cv_destroy()
101 atomic_dec(&cvp->cv_refs); in __cv_destroy()
104 while (cv_destroy_wakeup(cvp) == 0) in __cv_destroy()
105 wait_event_timeout(cvp->cv_destroy, cv_destroy_wakeup(cvp), 1); in __cv_destroy()
107 ASSERT3P(cvp->cv_mutex, ==, NULL); in __cv_destroy()
108 ASSERT3S(atomic_read(&cvp->cv_refs), ==, 0); in __cv_destroy()
109 ASSERT3S(atomic_read(&cvp->cv_waiters), ==, 0); in __cv_destroy()
110 ASSERT3S(waitqueue_active(&cvp->cv_event), ==, 0); in __cv_destroy()
115 cv_wait_common(kcondvar_t *cvp, kmutex_t *mp, int state, int io) in cv_wait_common() argument
120 ASSERT(cvp); in cv_wait_common()
122 ASSERT(cvp->cv_magic == CV_MAGIC); in cv_wait_common()
124 atomic_inc(&cvp->cv_refs); in cv_wait_common()
126 m = READ_ONCE(cvp->cv_mutex); in cv_wait_common()
128 m = xchg(&cvp->cv_mutex, mp); in cv_wait_common()
132 prepare_to_wait_exclusive(&cvp->cv_event, &wait, state); in cv_wait_common()
133 atomic_inc(&cvp->cv_waiters); in cv_wait_common()
147 if (atomic_dec_and_test(&cvp->cv_waiters)) { in cv_wait_common()
152 cvp->cv_mutex = NULL; in cv_wait_common()
153 wake_up(&cvp->cv_destroy); in cv_wait_common()
156 finish_wait(&cvp->cv_event, &wait); in cv_wait_common()
157 atomic_dec(&cvp->cv_refs); in cv_wait_common()
167 __cv_wait(kcondvar_t *cvp, kmutex_t *mp) in __cv_wait() argument
169 cv_wait_common(cvp, mp, TASK_UNINTERRUPTIBLE, 0); in __cv_wait()
174 __cv_wait_io(kcondvar_t *cvp, kmutex_t *mp) in __cv_wait_io() argument
176 cv_wait_common(cvp, mp, TASK_UNINTERRUPTIBLE, 1); in __cv_wait_io()
181 __cv_wait_io_sig(kcondvar_t *cvp, kmutex_t *mp) in __cv_wait_io_sig() argument
183 cv_wait_common(cvp, mp, TASK_INTERRUPTIBLE, 1); in __cv_wait_io_sig()
190 __cv_wait_sig(kcondvar_t *cvp, kmutex_t *mp) in __cv_wait_sig() argument
192 cv_wait_common(cvp, mp, TASK_INTERRUPTIBLE, 0); in __cv_wait_sig()
199 __cv_wait_idle(kcondvar_t *cvp, kmutex_t *mp) in __cv_wait_idle() argument
205 cv_wait_common(cvp, mp, TASK_INTERRUPTIBLE, 0); in __cv_wait_idle()
215 __cv_timedwait_common(kcondvar_t *cvp, kmutex_t *mp, clock_t expire_time, in __cv_timedwait_common() argument
222 ASSERT(cvp); in __cv_timedwait_common()
224 ASSERT(cvp->cv_magic == CV_MAGIC); in __cv_timedwait_common()
232 atomic_inc(&cvp->cv_refs); in __cv_timedwait_common()
233 m = READ_ONCE(cvp->cv_mutex); in __cv_timedwait_common()
235 m = xchg(&cvp->cv_mutex, mp); in __cv_timedwait_common()
239 prepare_to_wait_exclusive(&cvp->cv_event, &wait, state); in __cv_timedwait_common()
240 atomic_inc(&cvp->cv_waiters); in __cv_timedwait_common()
254 if (atomic_dec_and_test(&cvp->cv_waiters)) { in __cv_timedwait_common()
259 cvp->cv_mutex = NULL; in __cv_timedwait_common()
260 wake_up(&cvp->cv_destroy); in __cv_timedwait_common()
263 finish_wait(&cvp->cv_event, &wait); in __cv_timedwait_common()
264 atomic_dec(&cvp->cv_refs); in __cv_timedwait_common()
275 __cv_timedwait(kcondvar_t *cvp, kmutex_t *mp, clock_t exp_time) in __cv_timedwait() argument
277 return (__cv_timedwait_common(cvp, mp, exp_time, in __cv_timedwait()
283 __cv_timedwait_io(kcondvar_t *cvp, kmutex_t *mp, clock_t exp_time) in __cv_timedwait_io() argument
285 return (__cv_timedwait_common(cvp, mp, exp_time, in __cv_timedwait_io()
291 __cv_timedwait_sig(kcondvar_t *cvp, kmutex_t *mp, clock_t exp_time) in __cv_timedwait_sig() argument
295 rc = __cv_timedwait_common(cvp, mp, exp_time, TASK_INTERRUPTIBLE, 0); in __cv_timedwait_sig()
301 __cv_timedwait_idle(kcondvar_t *cvp, kmutex_t *mp, clock_t exp_time) in __cv_timedwait_idle() argument
308 rc = __cv_timedwait_common(cvp, mp, exp_time, in __cv_timedwait_idle()
320 __cv_timedwait_hires(kcondvar_t *cvp, kmutex_t *mp, hrtime_t expire_time, in __cv_timedwait_hires() argument
330 ASSERT(cvp); in __cv_timedwait_hires()
332 ASSERT(cvp->cv_magic == CV_MAGIC); in __cv_timedwait_hires()
339 atomic_inc(&cvp->cv_refs); in __cv_timedwait_hires()
340 m = READ_ONCE(cvp->cv_mutex); in __cv_timedwait_hires()
342 m = xchg(&cvp->cv_mutex, mp); in __cv_timedwait_hires()
346 prepare_to_wait_exclusive(&cvp->cv_event, &wait, state); in __cv_timedwait_hires()
347 atomic_inc(&cvp->cv_waiters); in __cv_timedwait_hires()
362 if (atomic_dec_and_test(&cvp->cv_waiters)) { in __cv_timedwait_hires()
367 cvp->cv_mutex = NULL; in __cv_timedwait_hires()
368 wake_up(&cvp->cv_destroy); in __cv_timedwait_hires()
371 finish_wait(&cvp->cv_event, &wait); in __cv_timedwait_hires()
372 atomic_dec(&cvp->cv_refs); in __cv_timedwait_hires()
382 cv_timedwait_hires_common(kcondvar_t *cvp, kmutex_t *mp, hrtime_t tim, in cv_timedwait_hires_common() argument
388 return (__cv_timedwait_hires(cvp, mp, tim, res, state)); in cv_timedwait_hires_common()
392 cv_timedwait_hires(kcondvar_t *cvp, kmutex_t *mp, hrtime_t tim, hrtime_t res, in cv_timedwait_hires() argument
395 return (cv_timedwait_hires_common(cvp, mp, tim, res, flag, in cv_timedwait_hires()
401 cv_timedwait_sig_hires(kcondvar_t *cvp, kmutex_t *mp, hrtime_t tim, in cv_timedwait_sig_hires() argument
406 rc = cv_timedwait_hires_common(cvp, mp, tim, res, flag, in cv_timedwait_sig_hires()
413 cv_timedwait_idle_hires(kcondvar_t *cvp, kmutex_t *mp, hrtime_t tim, in cv_timedwait_idle_hires() argument
421 rc = cv_timedwait_hires_common(cvp, mp, tim, res, flag, in cv_timedwait_idle_hires()
430 __cv_signal(kcondvar_t *cvp) in __cv_signal() argument
432 ASSERT(cvp); in __cv_signal()
433 ASSERT(cvp->cv_magic == CV_MAGIC); in __cv_signal()
434 atomic_inc(&cvp->cv_refs); in __cv_signal()
442 if (atomic_read(&cvp->cv_waiters) > 0) in __cv_signal()
443 wake_up(&cvp->cv_event); in __cv_signal()
445 atomic_dec(&cvp->cv_refs); in __cv_signal()
450 __cv_broadcast(kcondvar_t *cvp) in __cv_broadcast() argument
452 ASSERT(cvp); in __cv_broadcast()
453 ASSERT(cvp->cv_magic == CV_MAGIC); in __cv_broadcast()
454 atomic_inc(&cvp->cv_refs); in __cv_broadcast()
460 if (atomic_read(&cvp->cv_waiters) > 0) in __cv_broadcast()
461 wake_up_all(&cvp->cv_event); in __cv_broadcast()
463 atomic_dec(&cvp->cv_refs); in __cv_broadcast()