• Stafford Horne's avatar
    openrisc: fix possible deadlock scenario during timer sync · 610f01b9
    Stafford Horne authored
    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: default avatarMatt Redfearn <matt.redfearn@mips.com>
    Signed-off-by: default avatarStafford Horne <shorne@gmail.com>
    610f01b9
smp.c 5.31 KB