|
@@ -198,6 +198,8 @@ exit_idle:
|
|
|
start_critical_timings();
|
|
|
}
|
|
|
|
|
|
+DEFINE_PER_CPU(bool, cpu_dead_idle);
|
|
|
+
|
|
|
/*
|
|
|
* Generic idle loop implementation
|
|
|
*
|
|
@@ -222,8 +224,11 @@ static void cpu_idle_loop(void)
|
|
|
check_pgt_cache();
|
|
|
rmb();
|
|
|
|
|
|
- if (cpu_is_offline(smp_processor_id()))
|
|
|
+ if (cpu_is_offline(smp_processor_id())) {
|
|
|
+ smp_mb(); /* all activity before dead. */
|
|
|
+ this_cpu_write(cpu_dead_idle, true);
|
|
|
arch_cpu_idle_dead();
|
|
|
+ }
|
|
|
|
|
|
local_irq_disable();
|
|
|
arch_cpu_idle_enter();
|