Просмотр исходного кода

powerpc: Fix SMP time initialization problem

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>
Paul Mackerras 19 лет назад
Родитель
Сommit
cbe62e2b4a
1 измененных файлов с 2 добавлено и 0 удалено
  1. 2 0
      arch/powerpc/kernel/time.c

+ 2 - 0
arch/powerpc/kernel/time.c

@@ -484,6 +484,8 @@ void __init smp_space_timers(unsigned int max_cpus)
 	unsigned long offset = tb_ticks_per_jiffy / max_cpus;
 	unsigned long offset = tb_ticks_per_jiffy / max_cpus;
 	unsigned long previous_tb = per_cpu(last_jiffy, boot_cpuid);
 	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) {
 	for_each_cpu(i) {
 		if (i != boot_cpuid) {
 		if (i != boot_cpuid) {
 			previous_tb += offset;
 			previous_tb += offset;