Commit 54c4e6b5 authored by Paul Mackerras's avatar Paul Mackerras

powerpc: Fix bug in timebase synchronization on 32-bit SMP powermac

We were using udelay in the loop on the primary cpu waiting for the
secondary cpu to take the timebase value.  Unfortunately now that
udelay uses the timebase, and the timebase is stopped at this point,
the udelay never terminated.  This fixes it by not using udelay, and
increases the number of loops before we time out to compensate.
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent 0212ddd8
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/hardirq.h> #include <linux/hardirq.h>
#include <linux/cpu.h> #include <linux/cpu.h>
#include <linux/compiler.h>
#include <asm/ptrace.h> #include <asm/ptrace.h>
#include <asm/atomic.h> #include <asm/atomic.h>
...@@ -631,8 +632,9 @@ void smp_core99_give_timebase(void) ...@@ -631,8 +632,9 @@ void smp_core99_give_timebase(void)
mb(); mb();
/* wait for the secondary to have taken it */ /* wait for the secondary to have taken it */
for (t = 100000; t > 0 && sec_tb_reset; --t) /* note: can't use udelay here, since it needs the timebase running */
udelay(10); for (t = 10000000; t > 0 && sec_tb_reset; --t)
barrier();
if (sec_tb_reset) if (sec_tb_reset)
/* XXX BUG_ON here? */ /* XXX BUG_ON here? */
printk(KERN_WARNING "Timeout waiting sync(2) on second CPU\n"); printk(KERN_WARNING "Timeout waiting sync(2) on second CPU\n");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment