Lines Matching refs:cv
20 #define CV_ASSERT_LOCKED(cv) \ argument
21 RT_ASSERT(!(cv)->waiting_mtx || \
22 rt_mutex_get_owner((rt_mutex_t)(cv)->waiting_mtx) == \
25 void rt_condvar_init(rt_condvar_t cv, char *name) in rt_condvar_init() argument
32 rt_wqueue_init(&cv->event); in rt_condvar_init()
33 rt_atomic_store(&cv->waiters_cnt, 0); in rt_condvar_init()
34 rt_atomic_store(&cv->waiting_mtx, 0); in rt_condvar_init()
69 .wakeup = __wqueue_default_wake, .wqueue = &cv->event, \
73 int rt_condvar_timedwait(rt_condvar_t cv, rt_mutex_t mtx, int suspend_flag, in rt_condvar_timedwait() argument
82 CV_ASSERT_LOCKED(cv); in rt_condvar_timedwait()
89 waiting_mtx = rt_atomic_load(&cv->waiting_mtx); in rt_condvar_timedwait()
92 &cv->waiting_mtx, &waiting_mtx, (size_t)mtx); in rt_condvar_timedwait()
100 rt_atomic_add(&cv->waiters_cnt, 1); in rt_condvar_timedwait()
105 rc = _waitq_inqueue(&cv->event, &node, timeout, RT_INTERRUPTIBLE); in rt_condvar_timedwait()
107 rc = _waitq_inqueue(&cv->event, &node, timeout, RT_KILLABLE); in rt_condvar_timedwait()
128 if (rt_atomic_add(&cv->waiters_cnt, -1) == 1) in rt_condvar_timedwait()
131 acq_mtx_succ = rt_atomic_compare_exchange_strong(&cv->waiting_mtx, in rt_condvar_timedwait()
151 int rt_condvar_signal(rt_condvar_t cv) in rt_condvar_signal() argument
153 CV_ASSERT_LOCKED(cv); in rt_condvar_signal()
156 if (rt_atomic_load(&cv->waiters_cnt) > 0) in rt_condvar_signal()
157 rt_wqueue_wakeup(&cv->event, 0); in rt_condvar_signal()
159 cv->event.flag = 0; in rt_condvar_signal()
163 int rt_condvar_broadcast(rt_condvar_t cv) in rt_condvar_broadcast() argument
165 CV_ASSERT_LOCKED(cv); in rt_condvar_broadcast()
168 if (rt_atomic_load(&cv->waiters_cnt) > 0) in rt_condvar_broadcast()
169 rt_wqueue_wakeup_all(&cv->event, 0); in rt_condvar_broadcast()
171 cv->event.flag = 0; in rt_condvar_broadcast()