• Chuanxiao Dong's avatar
    drm/i915/gvt: Fix inconsistent locks holding sequence · f16bd3dd
    Chuanxiao Dong authored
    There are two kinds of locking sequence.
    
    One is in the thread which is started by vfio ioctl to do
    the iommu unmapping. The locking sequence is:
    	down_read(&group_lock) ----> mutex_lock(&cached_lock)
    
    The other is in the vfio release thread which will unpin all
    the cached pages. The lock sequence is:
    	mutex_lock(&cached_lock) ---> down_read(&group_lock)
    
    And, the cache_lock is used to protect the rb tree of the cache
    node and doing vfio unpin doesn't require this lock. Move the
    vfio unpin out of the cache_lock protected region.
    
    v2:
    - use for style instead of do{}while(1). (Zhenyu)
    
    Fixes: f30437c5 ("drm/i915/gvt: add KVMGT support")
    Signed-off-by: default avatarChuanxiao Dong <chuanxiao.dong@intel.com>
    Cc: Zhenyu Wang <zhenyuw@linux.intel.com>
    Cc: stable@vger.kernel.org # v4.10+
    Signed-off-by: default avatarZhenyu Wang <zhenyuw@linux.intel.com>
    f16bd3dd
kvmgt.c 35.9 KB