diff options
author | Peter Zijlstra <peterz@infradead.org> | 2012-02-11 00:05:00 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2014-02-10 10:17:13 -0500 |
commit | 606dba2e289446600a0b68422ed2019af5355c12 (patch) | |
tree | 286562f6ddcca34f3f029b68507b820f0c81b707 /kernel/sched/idle_task.c | |
parent | fed14d45f945042a15b09de48d7d3d58d9455fc4 (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.c | 6 |
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 | ||
36 | static struct task_struct *pick_next_task_idle(struct rq *rq) | 36 | static struct task_struct * |
37 | pick_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 */ |