Michael Neuling <mi...@neuling.org> writes: > On POWER9 the ERAT may be incorrect on wakeup from some stop states > that lose state. This causes random segvs and illegal instructions > when these stop states are enabled.
Incorrect how? Because with the ERAT flush where you've put it, there's still a good amount of code executed prior to the flush isn't there? ie. we come in at 0x100, do some of the prolog, do IDLE_TEST which takes us to pnv_powersave_wakeup, which then restores state from the paca (memory), that returns and then we check KVM ... and then finally we end up at pnv_wakeup_loss. Or is there some other path? Or is the ERAT incorrect in some specific way which means we only need to flush there? cheers > diff --git a/arch/powerpc/kernel/idle_book3s.S > b/arch/powerpc/kernel/idle_book3s.S > index 1ea14b96f1..ace2ad50c8 100644 > --- a/arch/powerpc/kernel/idle_book3s.S > +++ b/arch/powerpc/kernel/idle_book3s.S > @@ -793,6 +793,9 @@ fastsleep_workaround_at_exit: > */ > .global pnv_wakeup_loss > pnv_wakeup_loss: > +BEGIN_FTR_SECTION > + PPC_INVALIDATE_ERAT > +END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300) > ld r1,PACAR1(r13) > BEGIN_FTR_SECTION > CHECK_HMI_INTERRUPT > -- > 2.11.0