diff options
Diffstat (limited to 'arch/powerpc/kernel/time.c')
| -rw-r--r-- | arch/powerpc/kernel/time.c | 15 | 
1 files changed, 11 insertions, 4 deletions
| diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c index aa9269600ca2..375480c56eb9 100644 --- a/arch/powerpc/kernel/time.c +++ b/arch/powerpc/kernel/time.c @@ -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); | 
