* [PATCH for-next] openrisc: fix possible deadlock scenario during timer sync
@ 2017-11-03 4:33 Stafford Horne
0 siblings, 0 replies; only message in thread
From: Stafford Horne @ 2017-11-03 4:33 UTC (permalink / raw)
To: LKML
Cc: matt.redfearn, Stafford Horne, Jonas Bonn, Stefan Kristiansson,
Jan Henrik Weinstock, openrisc
OpenRISC borrows its timer sync logic from MIPS, Matt helped to review
the OpenRISC implementation and noted that we may suffer the same
deadlock case that MIPS has faced. The case being:
"the MIPS timer synchronization code contained the possibility of
deadlock. If you mark a CPU online before it goes into the synchronize
loop, then the boot CPU can schedule a different thread and send IPIs to
all "online" CPUs. It gets stuck waiting for the secondary to ack it's
IPI, since this secondary CPU has not enabled IRQs yet, and is stuck
waiting for the master to synchronise with it. The system then
deadlocks."
Fix this by moving set_cpu_online() to after timer sync.
Reported-by: Matt Redfearn <matt.redfearn@mips.com>
Signed-off-by: Stafford Horne <shorne@gmail.com>
---
arch/openrisc/kernel/smp.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/openrisc/kernel/smp.c b/arch/openrisc/kernel/smp.c
index 4d80ce6fa045..7d518ee8bddc 100644
--- a/arch/openrisc/kernel/smp.c
+++ b/arch/openrisc/kernel/smp.c
@@ -127,10 +127,10 @@ asmlinkage __init void secondary_start_kernel(void)
/*
* OK, now it's safe to let the boot CPU continue
*/
- set_cpu_online(cpu, true);
complete(&cpu_running);
synchronise_count_slave(cpu);
+ set_cpu_online(cpu, true);
local_irq_enable();
--
2.13.6
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2017-11-03 4:33 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-11-03 4:33 [PATCH for-next] openrisc: fix possible deadlock scenario during timer sync Stafford Horne
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome