@@ -210,6 +210,9 @@ int smp_cpu_setup(uint16_t addr, struct psw psw)
/* Start processing */
smp_cpu_restart_nolock(addr, NULL);
+ /* Wait until the cpu has finished setup and started the provided psw */
+ while (lc->restart_new_psw.addr != psw.addr)
+ mb();
out:
spin_unlock(&lock);
return rc;
@@ -159,6 +159,8 @@ smp_cpu_setup_state:
xgr %r1, %r1
lmg %r0, %r15, GEN_LC_SW_INT_GRS
lctlg %c0, %c0, GEN_LC_SW_INT_CRS
+ /* We should only go once through cpu setup and not for every restart */
+ stg %r14, GEN_LC_RESTART_NEW_PSW + 8
br %r14
pgm_int: