]> git.hungrycats.org Git - linux/commitdiff
[PATCH] CPU Hotplug: restore Idle task's priority during CPU_DEAD notification
authorAndrew Morton <akpm@osdl.org>
Thu, 27 May 2004 00:36:14 +0000 (17:36 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Thu, 27 May 2004 00:36:14 +0000 (17:36 -0700)
From: Srivatsa Vaddagiri <vatsa@in.ibm.com>

Fix a CPU Hotplug problem wherein idle task's "->prio" value is not
restored to MAX_PRIO during CPU_DEAD handling.  Without this patch, once a
CPU is offlined and then later onlined, it becomes "more or less" useless
(does not run any task other than its idle task!)

Ingo said:

  The __setscheduler() call is (technically) incorrect because in the
  SCHED_NORMAL case the prio should be zero.  So it's a bit cleaner to set up
  the static priority to MAX_PRIO and then revert the policy to SCHED_NORMAL
  via __setscheduler().

Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Andrew Morton <akpm@osdl.org>
kernel/sched.c

index b69efafcb2ca4cf096e12dec2c82451977251adb..2482757071d006b6416d82e867641a7f4efdd712 100644 (file)
@@ -3566,7 +3566,8 @@ static int migration_call(struct notifier_block *nfb, unsigned long action,
                /* Idle task back to normal (off runqueue, low prio) */
                rq = task_rq_lock(rq->idle, &flags);
                deactivate_task(rq->idle, rq);
-               __setscheduler(rq->idle, SCHED_NORMAL, MAX_PRIO);
+               rq->idle->static_prio = MAX_PRIO;
+               __setscheduler(rq->idle, SCHED_NORMAL, 0);
                task_rq_unlock(rq, &flags);
                BUG_ON(rq->nr_running != 0);