]> err.no Git - linux-2.6/commitdiff
powerpc: Fix SMP time initialization problem
authorPaul Mackerras <paulus@samba.org>
Thu, 10 Nov 2005 03:28:03 +0000 (14:28 +1100)
committerPaul Mackerras <paulus@samba.org>
Thu, 10 Nov 2005 03:28:03 +0000 (14:28 +1100)
We were getting the last_jiffy per-cpu variable set ahead of the current
timebase in smp_space_timers on SMP machines.  This caused the loop in
timer_interrupt to loop virtually forever, since tb_ticks_since assumes
that it will never be called with the timebase behind the last_jiffy
value.

Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/powerpc/kernel/time.c

index 386006b3d6160d6445097b340f3a9742436e09bd..260b6ecd26a9d61f72f7aa42a29455a11a3d6e61 100644 (file)
@@ -484,6 +484,8 @@ void __init smp_space_timers(unsigned int max_cpus)
        unsigned long offset = tb_ticks_per_jiffy / max_cpus;
        unsigned long previous_tb = per_cpu(last_jiffy, boot_cpuid);
 
+       /* make sure tb > per_cpu(last_jiffy, cpu) for all cpus always */
+       previous_tb -= tb_ticks_per_jiffy;
        for_each_cpu(i) {
                if (i != boot_cpuid) {
                        previous_tb += offset;