[v4, 1/4] powerpc: powernv: Switch off MMU before entering nap/sleep/rvwinkle mode

Michael Ellerman mpe at ellerman.id.au
Sun Dec 14 21:05:59 AEDT 2014


On Tue, 2014-09-12 at 18:56:50 UTC, "Shreyas B. Prabhu" wrote:
> From: Paul Mackerras <paulus at samba.org>
> 
> Currently, when going idle, we set the flag indicating that we are in
> nap mode (paca->kvm_hstate.hwthread_state) and then execute the nap
> (or sleep or rvwinkle) instruction, all with the MMU on.  This is bad
> for two reasons: (a) the architecture specifies that those instructions
> must be executed with the MMU off, and in fact with only the SF, HV, ME
> and possibly RI bits set, and (b) this introduces a race, because as
> soon as we set the flag, another thread can switch the MMU to a guest
> context.  If the race is lost, this thread will typically start looping
> on relocation-on ISIs at 0xc...4400.
> 
> This fixes it by setting the MSR as required by the architecture before
> setting the flag or executing the nap/sleep/rvwinkle instruction.
> 
> [ shreyas at linux.vnet.ibm.com: Edited to handle LE ]
> Signed-off-by: Paul Mackerras <paulus at samba.org>
> Signed-off-by: Shreyas B. Prabhu <shreyas at linux.vnet.ibm.com>
> Cc: Benjamin Herrenschmidt <benh at kernel.crashing.org>
> Cc: Michael Ellerman <mpe at ellerman.id.au>
> Cc: linuxppc-dev at lists.ozlabs.org

I'm going to CC this to stable unless anyone objects. It's not something people
are likely to hit, but the result is fairly catastrophic.

cheers


More information about the Linuxppc-dev mailing list