From: Dmitry Adamushko Date: Mon, 15 Oct 2007 15:00:08 +0000 (+0200) Subject: sched: optimize task_new_fair() X-Git-Tag: v2.6.24-rc1~1289^2~97 X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=commitdiff_plain;h=87fefa381ef27f46c1182622ea01eb9504cd2e24;p=linux.git 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 Signed-off-by: Ingo Molnar Signed-off-by: Peter Zijlstra Reviewed-by: Thomas Gleixner --- 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);