• Paul Mackerras's avatar
    powerpc/powernv: Switch off MMU before entering nap/sleep/rvwinkle mode · 8117ac6a
    Paul Mackerras authored
    
    
    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.
    
    Cc: stable@vger.kernel.org
    [ shreyas@linux.vnet.ibm.com: Edited to handle LE ]
    Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
    Signed-off-by: default avatarShreyas B. Prabhu <shreyas@linux.vnet.ibm.com>
    Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: linuxppc-dev@lists.ozlabs.org
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    8117ac6a