Lines Matching refs:cv
62 * of the CV.
64 #define CV_SLEEPQ(cv) ((sleepq_t *)(cv)->cv_opaque)
65 #define CV_WMESG(cv) ((const char *)(cv)->cv_opaque[1])
66 #define CV_SET_WMESG(cv, v) (cv)->cv_opaque[1] = __UNCONST(v)
68 #define CV_DEBUG_P(cv) (CV_WMESG(cv) != nodebug)
76 .sobj_name = "cv",
93 cv_init(kcondvar_t *cv, const char *wmesg)
97 CV_SET_WMESG(cv, wmesg);
98 sleepq_init(CV_SLEEPQ(cv));
107 cv_destroy(kcondvar_t *cv)
110 sleepq_destroy(CV_SLEEPQ(cv));
112 KASSERT(cv_is_valid(cv));
113 KASSERT(!cv_has_waiters(cv));
114 CV_SET_WMESG(cv, deadcv);
125 cv_enter(kcondvar_t *cv, kmutex_t *mtx, lwp_t *l, bool catch_p)
131 KASSERT(cv_is_valid(cv));
135 mp = sleepq_hashlock(cv);
136 sq = CV_SLEEPQ(cv);
138 sleepq_enqueue(sq, cv, CV_WMESG(cv), &cv_syncobj, catch_p);
140 KASSERT(cv_has_waiters(cv));
155 kcondvar_t *cv __diagused;
157 cv = (kcondvar_t *)(uintptr_t)l->l_wchan;
159 KASSERT(l->l_wchan == (wchan_t)cv);
160 KASSERT(l->l_sleepq == CV_SLEEPQ(cv));
161 KASSERT(cv_is_valid(cv));
162 KASSERT(cv_has_waiters(cv));
173 cv_wait(kcondvar_t *cv, kmutex_t *mtx)
180 nlocks = cv_enter(cv, mtx, l, false);
194 cv_wait_sig(kcondvar_t *cv, kmutex_t *mtx)
201 nlocks = cv_enter(cv, mtx, l, true);
217 cv_timedwait(kcondvar_t *cv, kmutex_t *mtx, int timo)
224 nlocks = cv_enter(cv, mtx, l, false);
242 cv_timedwait_sig(kcondvar_t *cv, kmutex_t *mtx, int timo)
249 nlocks = cv_enter(cv, mtx, l, true);
340 cv_timedwaitbt(kcondvar_t *cv, kmutex_t *mtx, struct bintime *bt,
367 error = cv_timedwait(cv, mtx, timo);
405 cv_timedwaitbt_sig(kcondvar_t *cv, kmutex_t *mtx, struct bintime *bt,
432 error = cv_timedwait_sig(cv, mtx, timo);
461 cv_signal(kcondvar_t *cv)
464 KASSERT(cv_is_valid(cv));
466 if (__predict_false(!LIST_EMPTY(CV_SLEEPQ(cv)))) {
471 cv_wakeup_one(cv);
483 cv_wakeup_one(kcondvar_t *cv)
489 mp = sleepq_hashlock(cv);
490 sq = CV_SLEEPQ(cv);
494 KASSERT(l->l_wchan == cv);
508 cv_broadcast(kcondvar_t *cv)
511 KASSERT(cv_is_valid(cv));
513 if (__predict_false(!LIST_EMPTY(CV_SLEEPQ(cv)))) {
518 cv_wakeup_all(cv);
530 cv_wakeup_all(kcondvar_t *cv)
536 mp = sleepq_hashlock(cv);
537 sq = CV_SLEEPQ(cv);
541 KASSERT(l->l_wchan == cv);
554 cv_has_waiters(kcondvar_t *cv)
557 return !LIST_EMPTY(CV_SLEEPQ(cv));
567 cv_is_valid(kcondvar_t *cv)
570 return CV_WMESG(cv) != deadcv && CV_WMESG(cv) != NULL;