diff options
Diffstat (limited to 'arch/powerpc/platforms/powermac/smp.c')
-rw-r--r-- | arch/powerpc/platforms/powermac/smp.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/arch/powerpc/platforms/powermac/smp.c b/arch/powerpc/platforms/powermac/smp.c index 1949b657b092..eeb2ae5ffc58 100644 --- a/arch/powerpc/platforms/powermac/smp.c +++ b/arch/powerpc/platforms/powermac/smp.c | |||
@@ -160,7 +160,7 @@ static inline void psurge_clr_ipi(int cpu) | |||
160 | */ | 160 | */ |
161 | static unsigned long psurge_smp_message[NR_CPUS]; | 161 | static unsigned long psurge_smp_message[NR_CPUS]; |
162 | 162 | ||
163 | void psurge_smp_message_recv(struct pt_regs *regs) | 163 | void psurge_smp_message_recv(void) |
164 | { | 164 | { |
165 | int cpu = smp_processor_id(); | 165 | int cpu = smp_processor_id(); |
166 | int msg; | 166 | int msg; |
@@ -174,12 +174,12 @@ void psurge_smp_message_recv(struct pt_regs *regs) | |||
174 | /* make sure there is a message there */ | 174 | /* make sure there is a message there */ |
175 | for (msg = 0; msg < 4; msg++) | 175 | for (msg = 0; msg < 4; msg++) |
176 | if (test_and_clear_bit(msg, &psurge_smp_message[cpu])) | 176 | if (test_and_clear_bit(msg, &psurge_smp_message[cpu])) |
177 | smp_message_recv(msg, regs); | 177 | smp_message_recv(msg); |
178 | } | 178 | } |
179 | 179 | ||
180 | irqreturn_t psurge_primary_intr(int irq, void *d, struct pt_regs *regs) | 180 | irqreturn_t psurge_primary_intr(int irq, void *d) |
181 | { | 181 | { |
182 | psurge_smp_message_recv(regs); | 182 | psurge_smp_message_recv(); |
183 | return IRQ_HANDLED; | 183 | return IRQ_HANDLED; |
184 | } | 184 | } |
185 | 185 | ||
@@ -328,6 +328,7 @@ static void __init smp_psurge_kick_cpu(int nr) | |||
328 | { | 328 | { |
329 | unsigned long start = __pa(__secondary_start_pmac_0) + nr * 8; | 329 | unsigned long start = __pa(__secondary_start_pmac_0) + nr * 8; |
330 | unsigned long a; | 330 | unsigned long a; |
331 | int i; | ||
331 | 332 | ||
332 | /* may need to flush here if secondary bats aren't setup */ | 333 | /* may need to flush here if secondary bats aren't setup */ |
333 | for (a = KERNELBASE; a < KERNELBASE + 0x800000; a += 32) | 334 | for (a = KERNELBASE; a < KERNELBASE + 0x800000; a += 32) |
@@ -340,7 +341,11 @@ static void __init smp_psurge_kick_cpu(int nr) | |||
340 | mb(); | 341 | mb(); |
341 | 342 | ||
342 | psurge_set_ipi(nr); | 343 | psurge_set_ipi(nr); |
343 | udelay(10); | 344 | /* |
345 | * We can't use udelay here because the timebase is now frozen. | ||
346 | */ | ||
347 | for (i = 0; i < 2000; ++i) | ||
348 | barrier(); | ||
344 | psurge_clr_ipi(nr); | 349 | psurge_clr_ipi(nr); |
345 | 350 | ||
346 | if (ppc_md.progress) ppc_md.progress("smp_psurge_kick_cpu - done", 0x354); | 351 | if (ppc_md.progress) ppc_md.progress("smp_psurge_kick_cpu - done", 0x354); |