[PATCH] sched: change prio bias only if queued
authorCon Kolivas <kernel@kolivas.org>
Wed, 9 Nov 2005 05:38:56 +0000 (21:38 -0800)
committerLinus Torvalds <torvalds@g5.osdl.org>
Wed, 9 Nov 2005 15:56:32 +0000 (07:56 -0800)
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>
kernel/sched.c

index c6827f94e156ce30931b38ef18f7bfc280fae607..e1f57bd5aaa6a33d729cd161f54bedf2039d1c42 100644 (file)
@@ -3508,25 +3508,24 @@ void set_user_nice(task_t *p, long nice)
         * not SCHED_NORMAL:
         */
        if (rt_task(p)) {
-               dec_prio_bias(rq, p->static_prio);
                p->static_prio = NICE_TO_PRIO(nice);
-               inc_prio_bias(rq, p->static_prio);
                goto out_unlock;
        }
        array = p->array;
-       if (array)
+       if (array) {
                dequeue_task(p, array);
+               dec_prio_bias(rq, p->static_prio);
+       }
 
        old_prio = p->prio;
        new_prio = NICE_TO_PRIO(nice);
        delta = new_prio - old_prio;
-       dec_prio_bias(rq, p->static_prio);
        p->static_prio = NICE_TO_PRIO(nice);
-       inc_prio_bias(rq, p->static_prio);
        p->prio += delta;
 
        if (array) {
                enqueue_task(p, array);
+               inc_prio_bias(rq, p->static_prio);
                /*
                 * If the task increased its priority or is running and
                 * lowered its priority, then reschedule its CPU: