Akshay Adiga <akshay.ad...@linux.vnet.ibm.com> writes: > commit 1e1601b38e6e ("powerpc/powernv/idle: Restore SPRs for deep idle > states via stop API.") uses stop-api provided by the firmware to restore > PSSCR. PSSCR restore is required for handling special wakeup. When special > wakeup is completed, the core enters stop state based on restored PSSCR. > > Currently PSSCR is restored to deepest available stop state, causing > a idle cpu to enter deeper stop state on a special wakeup, which causes > the cpu to hang on wakeup. > > A "sensors" command which reads temperature (through DTS sensors) on idle > cpu can trigger special wakeup. > > Failed Scenario : > Request restore of PSSCR with RL = 11 > cpu enters idle state (stop5) > user triggers "sensors" command > Assert special wakeup on cpu > Restores PSSCR with RL = 11 <---- Done by firmware > Read DTS sensor > Deassert special wakeup > cpu enters idle state (stop11) <-- Instead of stop5 > > Cpu hang is caused because cpu ended up in a deeper state than it requested > > This patch fixes instability caused by special wakeup when stop11 is > enabled. Requests restore of PSSCR to deepest stop state used by cpuidle. > Only when offlining cpu, request restore of PSSCR to deepest stop state. > On onlining cpu, request restore of PSSCR to deepest stop state used by > cpuidle. > > Fixes : 1e1601b38e6e ("powerpc/powernv/idle: Restore SPRs for deep idle > states via stop API.")
This should CC stable ? We'll need this to enable stop11 in firmware and not break things, right? -- Stewart Smith OPAL Architect, IBM.