• pingfan liu's avatar
    powerpc: kvm: fix rare but potential deadlock scene · 91648ec0
    pingfan liu authored
    Since kvmppc_hv_find_lock_hpte() is called from both virtmode and
    realmode, so it can trigger the deadlock.
    
    Suppose the following scene:
    
    Two physical cpuM, cpuN, two VM instances A, B, each VM has a group of
    vcpus.
    
    If on cpuM, vcpu_A_1 holds bitlock X (HPTE_V_HVLOCK), then is switched
    out, and on cpuN, vcpu_A_2 try to lock X in realmode, then cpuN will be
    caught in realmode for a long time.
    
    What makes things even worse if the following happens,
      On cpuM, bitlockX is hold, on cpuN, Y is hold.
      vcpu_B_2 try to lock Y on cpuM in realmode
      vcpu_A_2 try to lock X on cpuN in realmode
    
    Oops! deadlock happens
    Signed-off-by: default avatarLiu Ping Fan <pingfank@linux.vnet.ibm.com>
    Reviewed-by: default avatarPaul Mackerras <paulus@samba.org>
    CC: stable@vger.kernel.org
    Signed-off-by: default avatarAlexander Graf <agraf@suse.de>
    91648ec0
book3s_64_mmu_hv.c 41.3 KB