linux/arch/openrisc/kernel
Stafford Horne 610f01b9a8 openrisc: fix possible deadlock scenario during timer sync
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>
2017-11-03 14:01:17 +09:00
..
.gitignore openrisc: Add .gitignore 2017-02-25 04:14:36 +09:00
asm-offsets.c openrisc: use kbuild.h instead of defining macros in asm-offset.c 2012-10-25 15:54:33 +02:00
dma.c openrisc: initial SMP support 2017-11-03 14:01:13 +09:00
entry.S openrisc: enable LOCKDEP_SUPPORT and irqflags tracing 2017-11-03 14:01:16 +09:00
head.S openrisc: sleep instead of spin on secondary wait 2017-11-03 14:01:14 +09:00
irq.c openrisc: Get rid of handle_IRQ 2014-09-03 13:11:02 +00:00
Makefile openrisc: add tick timer multi-core sync logic 2017-11-03 14:01:16 +09:00
module.c openrisc: Refactor 16-bit constant relocation 2013-11-05 16:27:55 +01:00
or32_ksyms.c openrisc: Switch to use export.h instead of module.h 2017-05-15 22:02:33 +09:00
process.c OpenRISC fixes for 4.13 2017-07-07 13:58:49 -07:00
prom.c openrisc: remove unnecessary prom.c includes 2013-10-09 11:39:01 -05:00
ptrace.c sched/headers: Prepare for new header dependencies before moving code to <linux/sched/task_stack.h> 2017-03-02 08:42:36 +01:00
setup.c openrisc: initial SMP support 2017-11-03 14:01:13 +09:00
signal.c Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
smp.c openrisc: fix possible deadlock scenario during timer sync 2017-11-03 14:01:17 +09:00
stacktrace.c openrisc: support framepointers and STACKTRACE_SUPPORT 2017-11-03 14:01:15 +09:00
sync-timer.c openrisc: add tick timer multi-core sync logic 2017-11-03 14:01:16 +09:00
sys_call_table.c OpenRISC: System calls 2011-07-22 18:46:34 +02:00
time.c openrisc: add tick timer multi-core sync logic 2017-11-03 14:01:16 +09:00
traps.c openrisc: support framepointers and STACKTRACE_SUPPORT 2017-11-03 14:01:15 +09:00
unwinder.c openrisc: support framepointers and STACKTRACE_SUPPORT 2017-11-03 14:01:15 +09:00
vmlinux.h of/fdt: consolidate built-in dtb section variables 2014-04-30 00:59:13 -05:00
vmlinux.lds.S scripts/spelling.txt: add "aligment" pattern and fix typo instances 2017-02-27 18:43:46 -08:00