diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/sched.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/kernel/sched.c b/kernel/sched.c index a699eb066551..f9dc0a968a61 100644 --- a/kernel/sched.c +++ b/kernel/sched.c @@ -1180,7 +1180,7 @@ void scheduler_tick(int user_ticks, int sys_ticks) /* Task might have expired already, but not scheduled off yet */ if (p->array != rq->active) { set_tsk_need_resched(p); - return; + goto out; } spin_lock(&rq->lock); /* @@ -1207,7 +1207,7 @@ void scheduler_tick(int user_ticks, int sys_ticks) dequeue_task(p, rq->active); enqueue_task(p, rq->active); } - goto out; + goto out_unlock; } if (!--p->time_slice) { dequeue_task(p, rq->active); @@ -1223,8 +1223,9 @@ void scheduler_tick(int user_ticks, int sys_ticks) } else enqueue_task(p, rq->active); } -out: +out_unlock: spin_unlock(&rq->lock); +out: rebalance_tick(rq, 0); } |
