|
@@ -199,7 +199,16 @@ void cpu_idle(void)
|
|
|
#ifdef CONFIG_PL310_ERRATA_769419
|
|
|
wmb();
|
|
|
#endif
|
|
|
- if (hlt_counter) {
|
|
|
+ /*
|
|
|
+ * In poll mode we reenable interrupts and spin.
|
|
|
+ *
|
|
|
+ * Also if we detected in the wakeup from idle
|
|
|
+ * path that the tick broadcast device expired
|
|
|
+ * for us, we don't want to go deep idle as we
|
|
|
+ * know that the IPI is going to arrive right
|
|
|
+ * away
|
|
|
+ */
|
|
|
+ if (hlt_counter || tick_check_broadcast_expired()) {
|
|
|
local_irq_enable();
|
|
|
cpu_relax();
|
|
|
} else if (!need_resched()) {
|