Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
[pandora-kernel.git] / arch / powerpc / kernel / time.c
index aa92696..f33acfd 100644 (file)
@@ -229,6 +229,9 @@ static u64 scan_dispatch_log(u64 stop_tb)
        u64 stolen = 0;
        u64 dtb;
 
+       if (!dtl)
+               return 0;
+
        if (i == vpa->dtl_idx)
                return 0;
        while (i < vpa->dtl_idx) {
@@ -577,14 +580,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);