|
@@ -494,10 +494,15 @@ void timer_interrupt(struct pt_regs * regs)
|
|
set_dec(DECREMENTER_MAX);
|
|
set_dec(DECREMENTER_MAX);
|
|
|
|
|
|
/* Some implementations of hotplug will get timer interrupts while
|
|
/* Some implementations of hotplug will get timer interrupts while
|
|
- * offline, just ignore these
|
|
|
|
|
|
+ * offline, just ignore these and we also need to set
|
|
|
|
+ * decrementers_next_tb as MAX to make sure __check_irq_replay
|
|
|
|
+ * don't replay timer interrupt when return, otherwise we'll trap
|
|
|
|
+ * here infinitely :(
|
|
*/
|
|
*/
|
|
- if (!cpu_online(smp_processor_id()))
|
|
|
|
|
|
+ if (!cpu_online(smp_processor_id())) {
|
|
|
|
+ *next_tb = ~(u64)0;
|
|
return;
|
|
return;
|
|
|
|
+ }
|
|
|
|
|
|
/* Conditionally hard-enable interrupts now that the DEC has been
|
|
/* Conditionally hard-enable interrupts now that the DEC has been
|
|
* bumped to its maximum value
|
|
* bumped to its maximum value
|