summaryrefslogtreecommitdiff
path: root/na/kernel/sched_class_o1.cc
diff options
context:
space:
mode:
Diffstat (limited to 'na/kernel/sched_class_o1.cc')
-rw-r--r--na/kernel/sched_class_o1.cc7
1 files changed, 6 insertions, 1 deletions
diff --git a/na/kernel/sched_class_o1.cc b/na/kernel/sched_class_o1.cc
index a8ba5df..28c693c 100644
--- a/na/kernel/sched_class_o1.cc
+++ b/na/kernel/sched_class_o1.cc
@@ -44,8 +44,13 @@ int32 priority_to_timeslice(uint8 priority)
static void o1_task_tick(RunQueue* rq, TaskControlBlock* curr)
{
- if (curr == rq->idle())
+ if (curr == rq->idle()) {
+ /* Idle task: if anything is runnable, yield immediately */
+ if (rq->nr_running() > 0) {
+ rq->set_need_resched(true);
+ }
return;
+ }
curr->time_slice--;
if (curr->time_slice <= 0) {