diff options
| author | Dennis Li <Dennis.Li@amd.com> | 2020-08-20 10:06:32 +0800 | 
|---|---|---|
| committer | Alex Deucher <alexander.deucher@amd.com> | 2020-08-24 12:23:48 -0400 | 
| commit | 6049db43d6dd9cbb9d7f897839d15b0bc600e23c (patch) | |
| tree | ada04bea31c2af434811ffdcc34471859a603925 /drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | |
| parent | 66b8a9c0a747b9d05509d480f5054a65ac327515 (diff) | |
drm/amdgpu: change reset lock from mutex to rw_semaphore
clients don't need reset-lock for synchronization when no
GPU recovery.
v2:
change to return the return value of down_read_killable.
v3:
if GPU recovery begin, VF ignore FLR notification.
Reviewed-by: Monk Liu <monk.liu@amd.com>
Acked-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Dennis Li <Dennis.Li@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_device.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 6 | 
1 files changed, 3 insertions, 3 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c index 78fd2c9a7b7d..82242e2f5658 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c @@ -3054,7 +3054,7 @@ int amdgpu_device_init(struct amdgpu_device *adev,  	mutex_init(&adev->virt.vf_errors.lock);  	hash_init(adev->mn_hash);  	atomic_set(&adev->in_gpu_reset, 0); -	mutex_init(&adev->lock_reset); +	init_rwsem(&adev->reset_sem);  	mutex_init(&adev->psp.mutex);  	mutex_init(&adev->notifier_lock); @@ -4206,7 +4206,7 @@ static bool amdgpu_device_lock_adev(struct amdgpu_device *adev)  	if (atomic_cmpxchg(&adev->in_gpu_reset, 0, 1) != 0)  		return false; -	mutex_lock(&adev->lock_reset); +	down_write(&adev->reset_sem);  	atomic_inc(&adev->gpu_reset_counter);  	switch (amdgpu_asic_reset_method(adev)) { @@ -4229,7 +4229,7 @@ static void amdgpu_device_unlock_adev(struct amdgpu_device *adev)  	amdgpu_vf_error_trans_all(adev);  	adev->mp1_state = PP_MP1_STATE_NONE;  	atomic_set(&adev->in_gpu_reset, 0); -	mutex_unlock(&adev->lock_reset); +	up_write(&adev->reset_sem);  }  static void amdgpu_device_resume_display_audio(struct amdgpu_device *adev) | 
