|
@@ -577,14 +577,21 @@ void timer_interrupt(struct pt_regs * regs)
|
|
|
struct clock_event_device *evt = &decrementer->event;
|
|
|
u64 now;
|
|
|
|
|
|
+ /* Ensure a positive value is written to the decrementer, or else
|
|
|
+ * some CPUs will continue to take decrementer exceptions.
|
|
|
+ */
|
|
|
+ set_dec(DECREMENTER_MAX);
|
|
|
+
|
|
|
+ /* Some implementations of hotplug will get timer interrupts while
|
|
|
+ * offline, just ignore these
|
|
|
+ */
|
|
|
+ if (!cpu_online(smp_processor_id()))
|
|
|
+ return;
|
|
|
+
|
|
|
trace_timer_interrupt_entry(regs);
|
|
|
|
|
|
__get_cpu_var(irq_stat).timer_irqs++;
|
|
|
|
|
|
- /* Ensure a positive value is written to the decrementer, or else
|
|
|
- * some CPUs will continuue to take decrementer exceptions */
|
|
|
- set_dec(DECREMENTER_MAX);
|
|
|
-
|
|
|
#if defined(CONFIG_PPC32) && defined(CONFIG_PMAC)
|
|
|
if (atomic_read(&ppc_n_lost_interrupts) != 0)
|
|
|
do_IRQ(regs);
|