From fd051e1e8b2cae9a302c08ff6df76b98ea6fe58e Mon Sep 17 00:00:00 2001 From: Richard Braun Date: Tue, 12 Mar 2013 21:06:46 +0100 Subject: kern/thread: fix balancer initialization and wakeup --- kern/thread.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'kern/thread.c') diff --git a/kern/thread.c b/kern/thread.c index 3acfa07d..03a41d70 100644 --- a/kern/thread.c +++ b/kern/thread.c @@ -743,6 +743,9 @@ thread_sched_ts_wakeup_balancer(struct thread_runq *runq) { unsigned long on_rq; + if (runq->balancer == NULL) + return; + on_rq = atomic_cas(&runq->balancer->on_rq, 0, 1); if (on_rq) @@ -1376,8 +1379,12 @@ thread_balancer(void *arg) runq = arg; for (;;) { - thread_sleep(); + /* + * Start by balancing in case the first threads were not evenly + * dispatched. + */ thread_sched_ts_balance(runq); + thread_sleep(); } } -- cgit v1.2.3