diff options
author | Peter Zijlstra <a.p.zijlstra@chello.nl> | 2011-01-17 11:03:27 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2011-01-26 06:33:22 -0500 |
commit | da7a735e51f9622eb3e1672594d4a41da01d7e4f (patch) | |
tree | 27623dcd39c52a80b79e0ee86ab426fc9c7e2b46 /kernel/sched_idletask.c | |
parent | a8941d7ec81678fb69aea7183338175f112f3e0d (diff) |
sched: Fix switch_from_fair()
When a task is taken out of the fair class we must ensure the vruntime
is properly normalized because when we put it back in it will assume
to be normalized.
The case that goes wrong is when changing away from the fair class
while sleeping. Sleeping tasks have non-normalized vruntime in order
to make sleeper-fairness work. So treat the switch away from fair as a
wakeup and preserve the relative vruntime.
Also update sysrq-n to call the ->switch_{to,from} methods.
Reported-by: Onkalo Samu <samu.p.onkalo@nokia.com>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <new-submission>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/sched_idletask.c')
-rw-r--r-- | kernel/sched_idletask.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/kernel/sched_idletask.c b/kernel/sched_idletask.c index 41eb62a0808b..c82f26c1b7c3 100644 --- a/kernel/sched_idletask.c +++ b/kernel/sched_idletask.c | |||
@@ -52,14 +52,13 @@ static void set_curr_task_idle(struct rq *rq) | |||
52 | { | 52 | { |
53 | } | 53 | } |
54 | 54 | ||
55 | static void | 55 | static void switched_to_idle(struct rq *rq, struct task_struct *p) |
56 | switched_to_idle(struct rq *rq, struct task_struct *p, int running) | ||
57 | { | 56 | { |
58 | BUG(); | 57 | BUG(); |
59 | } | 58 | } |
60 | 59 | ||
61 | static void prio_changed_idle(struct rq *rq, struct task_struct *p, | 60 | static void |
62 | int oldprio, int running) | 61 | prio_changed_idle(struct rq *rq, struct task_struct *p, int oldprio) |
63 | { | 62 | { |
64 | BUG(); | 63 | BUG(); |
65 | } | 64 | } |