aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmit K. Arora <[email protected]>2010-05-25 18:53:46 +0530
committerIngo Molnar <[email protected]>2010-05-31 08:37:44 +0200
commit54e88fad223c4e1d94289611a90c7fe3ebe5631b (patch)
treec9c9f27bf4e1e9851ee75145960607f194b3313b
parent67a3e12b05e055c0415c556a315a3d3eb637e29e (diff)
sched: Make sure timers have migrated before killing the migration_thread
Problem: In a stress test where some heavy tests were running along with regular CPU offlining and onlining, a hang was observed. The system seems to be hung at a point where migration_call() tries to kill the migration_thread of the dying CPU, which just got moved to the current CPU. This migration thread does not get a chance to run (and die) since rt_throttled is set to 1 on current, and it doesn't get cleared as the hrtimer which is supposed to reset the rt bandwidth (sched_rt_period_timer) is tied to the CPU which we just marked dead! Solution: This patch pushes the killing of migration thread to "CPU_POST_DEAD" event. By then all the timers (including sched_rt_period_timer) should have got migrated (along with other callbacks). Signed-off-by: Amit Arora <[email protected]> Signed-off-by: Gautham R Shenoy <[email protected]> Acked-by: Tejun Heo <[email protected]> Signed-off-by: Peter Zijlstra <[email protected]> Cc: Thomas Gleixner <[email protected]> LKML-Reference: <[email protected]> Signed-off-by: Ingo Molnar <[email protected]>
-rw-r--r--kernel/stop_machine.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/kernel/stop_machine.c b/kernel/stop_machine.c
index b4e7431e7c78..70f8d90331e9 100644
--- a/kernel/stop_machine.c
+++ b/kernel/stop_machine.c
@@ -321,7 +321,7 @@ static int __cpuinit cpu_stop_cpu_callback(struct notifier_block *nfb,
#ifdef CONFIG_HOTPLUG_CPU
case CPU_UP_CANCELED:
- case CPU_DEAD:
+ case CPU_POST_DEAD:
{
struct cpu_stop_work *work;