Lines Matching defs:cvp

65 __cv_init(kcondvar_t *cvp, char *name, kcv_type_t type, void *arg)
67 ASSERT(cvp);
72 cvp->cv_magic = CV_MAGIC;
73 init_waitqueue_head(&cvp->cv_event);
74 init_waitqueue_head(&cvp->cv_destroy);
75 atomic_set(&cvp->cv_waiters, 0);
76 atomic_set(&cvp->cv_refs, 1);
77 cvp->cv_mutex = NULL;
82 cv_destroy_wakeup(kcondvar_t *cvp)
84 if (!atomic_read(&cvp->cv_waiters) && !atomic_read(&cvp->cv_refs)) {
85 ASSERT(cvp->cv_mutex == NULL);
86 ASSERT(!waitqueue_active(&cvp->cv_event));
94 __cv_destroy(kcondvar_t *cvp)
96 ASSERT(cvp);
97 ASSERT(cvp->cv_magic == CV_MAGIC);
99 cvp->cv_magic = CV_DESTROY;
100 atomic_dec(&cvp->cv_refs);
103 while (cv_destroy_wakeup(cvp) == 0)
104 wait_event_timeout(cvp->cv_destroy, cv_destroy_wakeup(cvp), 1);
106 ASSERT3P(cvp->cv_mutex, ==, NULL);
107 ASSERT3S(atomic_read(&cvp->cv_refs), ==, 0);
108 ASSERT3S(atomic_read(&cvp->cv_waiters), ==, 0);
109 ASSERT3S(waitqueue_active(&cvp->cv_event), ==, 0);
114 cv_wait_common(kcondvar_t *cvp, kmutex_t *mp, int state, int io)
119 ASSERT(cvp);
121 ASSERT(cvp->cv_magic == CV_MAGIC);
123 atomic_inc(&cvp->cv_refs);
125 m = READ_ONCE(cvp->cv_mutex);
127 m = xchg(&cvp->cv_mutex, mp);
131 prepare_to_wait_exclusive(&cvp->cv_event, &wait, state);
132 atomic_inc(&cvp->cv_waiters);
137 * race where 'cvp->cv_waiters > 0' but the list is empty.
146 if (atomic_dec_and_test(&cvp->cv_waiters)) {
151 cvp->cv_mutex = NULL;
152 wake_up(&cvp->cv_destroy);
155 finish_wait(&cvp->cv_event, &wait);
156 atomic_dec(&cvp->cv_refs);
159 * Hold mutex after we release the cvp, otherwise we could dead lock
166 __cv_wait(kcondvar_t *cvp, kmutex_t *mp)
168 cv_wait_common(cvp, mp, TASK_UNINTERRUPTIBLE, 0);
173 __cv_wait_io(kcondvar_t *cvp, kmutex_t *mp)
175 cv_wait_common(cvp, mp, TASK_UNINTERRUPTIBLE, 1);
180 __cv_wait_io_sig(kcondvar_t *cvp, kmutex_t *mp)
182 cv_wait_common(cvp, mp, TASK_INTERRUPTIBLE, 1);
189 __cv_wait_sig(kcondvar_t *cvp, kmutex_t *mp)
191 cv_wait_common(cvp, mp, TASK_INTERRUPTIBLE, 0);
198 __cv_wait_idle(kcondvar_t *cvp, kmutex_t *mp)
204 cv_wait_common(cvp, mp, TASK_INTERRUPTIBLE, 0);
214 __cv_timedwait_common(kcondvar_t *cvp, kmutex_t *mp, clock_t expire_time,
221 ASSERT(cvp);
223 ASSERT(cvp->cv_magic == CV_MAGIC);
231 atomic_inc(&cvp->cv_refs);
232 m = READ_ONCE(cvp->cv_mutex);
234 m = xchg(&cvp->cv_mutex, mp);
238 prepare_to_wait_exclusive(&cvp->cv_event, &wait, state);
239 atomic_inc(&cvp->cv_waiters);
244 * race where 'cvp->cv_waiters > 0' but the list is empty.
253 if (atomic_dec_and_test(&cvp->cv_waiters)) {
258 cvp->cv_mutex = NULL;
259 wake_up(&cvp->cv_destroy);
262 finish_wait(&cvp->cv_event, &wait);
263 atomic_dec(&cvp->cv_refs);
266 * Hold mutex after we release the cvp, otherwise we could dead lock
274 __cv_timedwait(kcondvar_t *cvp, kmutex_t *mp, clock_t exp_time)
276 return (__cv_timedwait_common(cvp, mp, exp_time,
282 __cv_timedwait_io(kcondvar_t *cvp, kmutex_t *mp, clock_t exp_time)
284 return (__cv_timedwait_common(cvp, mp, exp_time,
290 __cv_timedwait_sig(kcondvar_t *cvp, kmutex_t *mp, clock_t exp_time)
294 rc = __cv_timedwait_common(cvp, mp, exp_time, TASK_INTERRUPTIBLE, 0);
300 __cv_timedwait_idle(kcondvar_t *cvp, kmutex_t *mp, clock_t exp_time)
307 rc = __cv_timedwait_common(cvp, mp, exp_time,
319 __cv_timedwait_hires(kcondvar_t *cvp, kmutex_t *mp, hrtime_t expire_time,
329 ASSERT(cvp);
331 ASSERT(cvp->cv_magic == CV_MAGIC);
338 atomic_inc(&cvp->cv_refs);
339 m = READ_ONCE(cvp->cv_mutex);
341 m = xchg(&cvp->cv_mutex, mp);
345 prepare_to_wait_exclusive(&cvp->cv_event, &wait, state);
346 atomic_inc(&cvp->cv_waiters);
351 * race where 'cvp->cv_waiters > 0' but the list is empty.
361 if (atomic_dec_and_test(&cvp->cv_waiters)) {
366 cvp->cv_mutex = NULL;
367 wake_up(&cvp->cv_destroy);
370 finish_wait(&cvp->cv_event, &wait);
371 atomic_dec(&cvp->cv_refs);
381 cv_timedwait_hires_common(kcondvar_t *cvp, kmutex_t *mp, hrtime_t tim,
387 return (__cv_timedwait_hires(cvp, mp, tim, res, state));
391 cv_timedwait_hires(kcondvar_t *cvp, kmutex_t *mp, hrtime_t tim, hrtime_t res,
394 return (cv_timedwait_hires_common(cvp, mp, tim, res, flag,
400 cv_timedwait_sig_hires(kcondvar_t *cvp, kmutex_t *mp, hrtime_t tim,
405 rc = cv_timedwait_hires_common(cvp, mp, tim, res, flag,
412 cv_timedwait_idle_hires(kcondvar_t *cvp, kmutex_t *mp, hrtime_t tim,
420 rc = cv_timedwait_hires_common(cvp, mp, tim, res, flag,
429 __cv_signal(kcondvar_t *cvp)
431 ASSERT(cvp);
432 ASSERT(cvp->cv_magic == CV_MAGIC);
433 atomic_inc(&cvp->cv_refs);
441 if (atomic_read(&cvp->cv_waiters) > 0)
442 wake_up(&cvp->cv_event);
444 atomic_dec(&cvp->cv_refs);
449 __cv_broadcast(kcondvar_t *cvp)
451 ASSERT(cvp);
452 ASSERT(cvp->cv_magic == CV_MAGIC);
453 atomic_inc(&cvp->cv_refs);
459 if (atomic_read(&cvp->cv_waiters) > 0)
460 wake_up_all(&cvp->cv_event);
462 atomic_dec(&cvp->cv_refs);