diff options
author | Dmitry Adamushko <dmitry.adamushko@gmail.com> | 2007-10-15 17:00:08 +0200 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2007-10-15 17:00:08 +0200 |
commit | 87fefa381ef27f46c1182622ea01eb9504cd2e24 (patch) | |
tree | 036336afad61898307bd3699ecdc3bcbdc3850b6 /kernel/sched_fair.c | |
parent | 75d4ef16a6aa84f708188bada182315f80aab6fa (diff) | |
download | lwn-87fefa381ef27f46c1182622ea01eb9504cd2e24.tar.gz lwn-87fefa381ef27f46c1182622ea01eb9504cd2e24.zip |
sched: optimize task_new_fair()
due to the fact that we no longer keep the 'current' within the tree,
dequeue/enqueue_entity() is useless for the 'current' in
task_new_fair(). We are about to reschedule and
sched_class->put_prev_task() will put the 'current' back into the tree,
based on its new key.
text data bss dec hex filename
24388 2734 20 27142 6a06 sched.o.before
24341 2734 20 27095 69d7 sched.o.after
Signed-off-by: Dmitry Adamushko <dmitry.adamushko@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'kernel/sched_fair.c')
-rw-r--r-- | kernel/sched_fair.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c index b9e426a8a09f..827a0636525a 100644 --- a/kernel/sched_fair.c +++ b/kernel/sched_fair.c @@ -972,10 +972,11 @@ static void task_new_fair(struct rq *rq, struct task_struct *p) if (sysctl_sched_child_runs_first && curr->vruntime < se->vruntime) { - - dequeue_entity(cfs_rq, curr, 0); + /* + * Upon rescheduling, sched_class::put_prev_task() will place + * 'current' within the tree based on its new key value. + */ swap(curr->vruntime, se->vruntime); - enqueue_entity(cfs_rq, curr, 0); } update_stats_enqueue(cfs_rq, se); |