
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>
---

 25-akpm/kernel/sched.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletion(-)

diff -puN kernel/sched.c~restore-idle-tasks-priority-during-cpu_dead-notification kernel/sched.c
--- 25/kernel/sched.c~restore-idle-tasks-priority-during-cpu_dead-notification	Wed May 26 16:31:41 2004
+++ 25-akpm/kernel/sched.c	Wed May 26 16:31:41 2004
@@ -3742,7 +3742,8 @@ static int migration_call(struct notifie
 		/* 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);
 
_
