Commit faf898a6 authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[PATCH] CPU Hotplug: restore Idle task's priority during CPU_DEAD notification

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: default avatarIngo Molnar <mingo@elte.hu>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
parent 4ffa43b8
...@@ -3566,7 +3566,8 @@ static int migration_call(struct notifier_block *nfb, unsigned long action, ...@@ -3566,7 +3566,8 @@ static int migration_call(struct notifier_block *nfb, unsigned long action,
/* Idle task back to normal (off runqueue, low prio) */ /* Idle task back to normal (off runqueue, low prio) */
rq = task_rq_lock(rq->idle, &flags); rq = task_rq_lock(rq->idle, &flags);
deactivate_task(rq->idle, rq); 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); task_rq_unlock(rq, &flags);
BUG_ON(rq->nr_running != 0); BUG_ON(rq->nr_running != 0);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment