openrisc: sleep instead of spin on secondary wait
authorStafford Horne <shorne@gmail.com>
Fri, 23 Jun 2017 22:09:59 +0000 (07:09 +0900)
committerStafford Horne <shorne@gmail.com>
Fri, 3 Nov 2017 05:01:14 +0000 (14:01 +0900)
commitc056718464512da06d7f65a27d5e4f1707b24c80
tree3b3b3076d876428ae8b81826f7171f22e84009a5
parentb441aab7aa0e15955c432736b08a218a6a4c77f0
openrisc: sleep instead of spin on secondary wait

Currently we do a spin on secondary cpus when waiting to boot.  This
theoretically causes issues with power consumption and does cause issues
with qemu cycle burning (it starves cpu 0 from actually being able to
boot.)

This change puts each secondary cpu to sleep if they have a power
management unit, then signals them to wake via IPI when its time to boot.
If the cpus have no power management unit they will loop as before.

Note: The wakeup IPI requires a special interrupt handler as on secondary
cpu's the interrupt infrastructure is not yet established.  This
interrupt handler is set and reset by updating SPR_EVBAR.

Signed-off-by: Stafford Horne <shorne@gmail.com>
arch/openrisc/kernel/head.S
arch/openrisc/kernel/smp.c