From 3532cf4bea2ff03ec3df66a0f7f317daf5285dde Mon Sep 17 00:00:00 2001 From: Antti Kantee Date: Tue, 21 Apr 2015 15:34:54 +0000 Subject: [PATCH] Use BMK_SCHED_BLOCK_INFTIME where appropriate --- lib/libbmk_rumpuser/rumpuser_synch.c | 21 ++++++++++----------- platform/xen/xen/include/mini-os/wait.h | 2 +- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/lib/libbmk_rumpuser/rumpuser_synch.c b/lib/libbmk_rumpuser/rumpuser_synch.c index bd3c051..39a1f6d 100644 --- a/lib/libbmk_rumpuser/rumpuser_synch.c +++ b/lib/libbmk_rumpuser/rumpuser_synch.c @@ -40,8 +40,6 @@ #include #include -#define WAIT_NOTIMEOUT -1 - TAILQ_HEAD(waithead, waiter); struct waiter { struct bmk_thread *who; @@ -50,16 +48,17 @@ struct waiter { }; static int -wait(struct waithead *wh, bmk_time_t nsec) +wait(struct waithead *wh, bmk_time_t wakeup) { struct waiter w; - bmk_time_t wakeup; + + if (wakeup != BMK_SCHED_BLOCK_INFTIME) + wakeup += bmk_platform_clock_monotonic(); w.who = bmk_sched_current(); - TAILQ_INSERT_TAIL(wh, &w, entries); w.onlist = 1; - if (nsec != WAIT_NOTIMEOUT) - wakeup = bmk_platform_clock_monotonic() + nsec; + TAILQ_INSERT_TAIL(wh, &w, entries); + bmk_sched_block_timeout(w.who, wakeup); bmk_sched(); @@ -150,7 +149,7 @@ rumpuser_mutex_enter(struct rumpuser_mtx *mtx) if (rumpuser_mutex_tryenter(mtx) != 0) { rumpkern_unsched(&nlocks, NULL); while (rumpuser_mutex_tryenter(mtx) != 0) - wait(&mtx->waiters, WAIT_NOTIMEOUT); + wait(&mtx->waiters, BMK_SCHED_BLOCK_INFTIME); rumpkern_sched(nlocks, NULL); } } @@ -245,7 +244,7 @@ rumpuser_rw_enter(int enum_rumprwlock, struct rumpuser_rw *rw) if (rumpuser_rw_tryenter(enum_rumprwlock, rw) != 0) { rumpkern_unsched(&nlocks, NULL); while (rumpuser_rw_tryenter(enum_rumprwlock, rw) != 0) - wait(w, WAIT_NOTIMEOUT); + wait(w, BMK_SCHED_BLOCK_INFTIME); rumpkern_sched(nlocks, NULL); } } @@ -393,7 +392,7 @@ rumpuser_cv_wait(struct rumpuser_cv *cv, struct rumpuser_mtx *mtx) cv->nwaiters++; cv_unsched(mtx, &nlocks); - wait(&cv->waiters, WAIT_NOTIMEOUT); + wait(&cv->waiters, BMK_SCHED_BLOCK_INFTIME); cv_resched(mtx, nlocks); cv->nwaiters--; } @@ -404,7 +403,7 @@ rumpuser_cv_wait_nowrap(struct rumpuser_cv *cv, struct rumpuser_mtx *mtx) cv->nwaiters++; rumpuser_mutex_exit(mtx); - wait(&cv->waiters, WAIT_NOTIMEOUT); + wait(&cv->waiters, BMK_SCHED_BLOCK_INFTIME); rumpuser_mutex_enter_nowrap(mtx); cv->nwaiters--; } diff --git a/platform/xen/xen/include/mini-os/wait.h b/platform/xen/xen/include/mini-os/wait.h index 6c567fa..a9b7432 100644 --- a/platform/xen/xen/include/mini-os/wait.h +++ b/platform/xen/xen/include/mini-os/wait.h @@ -89,7 +89,7 @@ static inline void minios_wake_up(struct wait_queue_head *head) local_irq_restore(flags); \ } while(0) -#define minios_wait_event(wq, condition) minios_wait_event_deadline(wq, condition, -1) +#define minios_wait_event(wq, condition) minios_wait_event_deadline(wq, condition, BMK_SCHED_BLOCK_INFTIME) -- 2.39.5