]> git.baikalelectronics.ru Git - kernel.git/commit
openrisc: fix possible deadlock scenario during timer sync
authorStafford Horne <shorne@gmail.com>
Fri, 3 Nov 2017 03:22:27 +0000 (12:22 +0900)
committerStafford Horne <shorne@gmail.com>
Fri, 3 Nov 2017 05:01:17 +0000 (14:01 +0900)
commit87dd50762bb6cde46882ee2a47a103fc128985a5
treef5d35024cb37e05c03c85029685c57e6cfa43590
parentac8678f1a5f2294823343af49a938d755200f67a
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>
arch/openrisc/kernel/smp.c