aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/sched/idle_task.c
diff options
context:
space:
mode:
authorPeter Zijlstra <peterz@infradead.org>2012-02-11 00:05:00 -0500
committerIngo Molnar <mingo@kernel.org>2014-02-10 10:17:13 -0500
commit606dba2e289446600a0b68422ed2019af5355c12 (patch)
tree286562f6ddcca34f3f029b68507b820f0c81b707 /kernel/sched/idle_task.c
parentfed14d45f945042a15b09de48d7d3d58d9455fc4 (diff)
sched: Push put_prev_task() into pick_next_task()
In order to avoid having to do put/set on a whole cgroup hierarchy when we context switch, push the put into pick_next_task() so that both operations are in the same function. Further changes then allow us to possibly optimize away redundant work. Signed-off-by: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/r/1328936700.2476.17.camel@laptop Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'kernel/sched/idle_task.c')
-rw-r--r--kernel/sched/idle_task.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/kernel/sched/idle_task.c b/kernel/sched/idle_task.c
index 516c3d9ceea1..e5c922ac40ce 100644
--- a/kernel/sched/idle_task.c
+++ b/kernel/sched/idle_task.c
@@ -33,8 +33,12 @@ static void check_preempt_curr_idle(struct rq *rq, struct task_struct *p, int fl
33 resched_task(rq->idle); 33 resched_task(rq->idle);
34} 34}
35 35
36static struct task_struct *pick_next_task_idle(struct rq *rq) 36static struct task_struct *
37pick_next_task_idle(struct rq *rq, struct task_struct *prev)
37{ 38{
39 if (prev)
40 prev->sched_class->put_prev_task(rq, prev);
41
38 schedstat_inc(rq, sched_goidle); 42 schedstat_inc(rq, sched_goidle);
39#ifdef CONFIG_SMP 43#ifdef CONFIG_SMP
40 /* Trigger the post schedule to do an idle_enter for CFS */ 44 /* Trigger the post schedule to do an idle_enter for CFS */