• Paul Mackerras's avatar
    powerpc/64: Re-fix race condition between going idle and entering guest · 56c46222
    Paul Mackerras authored
    Commit 8117ac6a ("powerpc/powernv: Switch off MMU before entering
    nap/sleep/rvwinkle mode", 2014-12-10) fixed a race condition where one
    thread entering a KVM guest could switch the MMU context to the guest
    while another thread was still in host kernel context with the MMU on.
    That commit moved the point where a thread entering a power-saving
    mode set its kvm_hstate.hwthread_state field in its PACA to
    KVM_HWTHREAD_IN_IDLE from a point where the MMU was on to after the
    MMU had been switched off.  That commit also added a comment
    explaining that we have to switch to real mode before setting
    hwthread_state to avoid this race.
    
    Nevertheless, commit 4eae2c9a ("powerpc/powernv: Make
    pnv_powersave_common more generic", 2016-07-08) subsequently moved
    the setting of hwthread_state back to a point where the MMU is on,
    thus reintroducing the race, despite the comment saying that this
    should not be done being included in full in the context lines of
    the patch that did it.
    
    This fixes the race again and adds a bigger and shoutier comment
    explaining the potential race condition.
    
    Fixes: 4eae2c9a
    
     ("powerpc/powernv: Make pnv_powersave_common more generic")
    Cc: stable@vger.kernel.org # v4.8+
    Signed-off-by: default avatarPaul Mackerras <paulus@ozlabs.org>
    Reviewed-by: default avatarShreyas B. Prabhu <shreyasbp@gmail.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    56c46222
idle_book3s.S 16.3 KB