powerpc: Make decrementer interrupt robust against offlined CPUs
With some implementations, it is possible that a timer interrupt occurs every few seconds on an offline CPU. In this case, just re-arm the decrementer and return immediately Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
parent
ecb78ab6f3
commit
963e5d3b76
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue