void rumpuser_cv_wait(struct rumpuser_cv *cv, struct rumpuser_mtx *mtx) { int nlocks; cv->nwaiters++; cv_unsched(mtx, &nlocks); wait(&cv->waiters, BMK_SCHED_BLOCK_INFTIME); cv_resched(mtx, nlocks); cv->nwaiters--; }
void rumpuser_cv_wait(struct rumpuser_cv *cv, struct rumpuser_mtx *mtx) { int nlocks; cv->nwaiters++; cv_unsched(mtx, &nlocks); wait(&cv->waiters, 0); cv_resched(mtx, nlocks); cv->nwaiters--; }
int rumpuser_cv_timedwait(struct rumpuser_cv *cv, struct rumpuser_mtx *mtx, int64_t sec, int64_t nsec) { int nlocks; int rv; cv->nwaiters++; cv_unsched(mtx, &nlocks); rv = wait(&cv->waiters, sec * 1000*1000*1000ULL + nsec); cv_resched(mtx, nlocks); cv->nwaiters--; return rv; }