On Fri, 2017-06-23 at 19:33 +1000, Michael Ellerman wrote: > 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?
As in stale. Not sure about the details. > 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? In real mode, should be ok. > 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? I think real mode translations are ok but I'll ask around. Cheers, Ben. > 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