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>
This commit is contained in:
parent
094fe2e712
commit
cbe62e2b4a
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue