diff options
author | Con Kolivas <kernel@kolivas.org> | 2005-11-09 00:38:56 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-11-09 10:56:32 -0500 |
commit | 738a2ccbcf8c2c1b039f1e76662dce60b22b694b (patch) | |
tree | b7359315b135d2266cef2bcfac10347ab34a3ad9 /kernel/sched.c | |
parent | b910472dd3b7c1d51af9a594a759f642520c33e1 (diff) |
[PATCH] sched: change prio bias only if queued
prio_bias should only be adjusted in set_user_nice if p is actually currently
queued.
Signed-off-by: Con Kolivas <kernel@kolivas.org>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Nick Piggin <nickpiggin@yahoo.com.au>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'kernel/sched.c')
-rw-r--r-- | kernel/sched.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/kernel/sched.c b/kernel/sched.c index c6827f94e156..e1f57bd5aaa6 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
@@ -3508,25 +3508,24 @@ void set_user_nice(task_t *p, long nice) | |||
3508 | * not SCHED_NORMAL: | 3508 | * not SCHED_NORMAL: |
3509 | */ | 3509 | */ |
3510 | if (rt_task(p)) { | 3510 | if (rt_task(p)) { |
3511 | dec_prio_bias(rq, p->static_prio); | ||
3512 | p->static_prio = NICE_TO_PRIO(nice); | 3511 | p->static_prio = NICE_TO_PRIO(nice); |
3513 | inc_prio_bias(rq, p->static_prio); | ||
3514 | goto out_unlock; | 3512 | goto out_unlock; |
3515 | } | 3513 | } |
3516 | array = p->array; | 3514 | array = p->array; |
3517 | if (array) | 3515 | if (array) { |
3518 | dequeue_task(p, array); | 3516 | dequeue_task(p, array); |
3517 | dec_prio_bias(rq, p->static_prio); | ||
3518 | } | ||
3519 | 3519 | ||
3520 | old_prio = p->prio; | 3520 | old_prio = p->prio; |
3521 | new_prio = NICE_TO_PRIO(nice); | 3521 | new_prio = NICE_TO_PRIO(nice); |
3522 | delta = new_prio - old_prio; | 3522 | delta = new_prio - old_prio; |
3523 | dec_prio_bias(rq, p->static_prio); | ||
3524 | p->static_prio = NICE_TO_PRIO(nice); | 3523 | p->static_prio = NICE_TO_PRIO(nice); |
3525 | inc_prio_bias(rq, p->static_prio); | ||
3526 | p->prio += delta; | 3524 | p->prio += delta; |
3527 | 3525 | ||
3528 | if (array) { | 3526 | if (array) { |
3529 | enqueue_task(p, array); | 3527 | enqueue_task(p, array); |
3528 | inc_prio_bias(rq, p->static_prio); | ||
3530 | /* | 3529 | /* |
3531 | * If the task increased its priority or is running and | 3530 | * If the task increased its priority or is running and |
3532 | * lowered its priority, then reschedule its CPU: | 3531 | * lowered its priority, then reschedule its CPU: |