mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-25 03:55:09 +08:00
drm/amdgpu: SRIOV flr_work should take write_lock
[Why] If flr_work takes read_lock, then other threads who takes read_lock can access hardware when host is doing vf flr. [How] flr_work should take write_lock to avoid this case. Signed-off-by: Jingwen Chen <Jingwen.Chen2@amd.com> Reviewed-by: Monk Liu <monk.liu@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
c0838d3a93
commit
b5840166dc
@ -252,7 +252,7 @@ static void xgpu_ai_mailbox_flr_work(struct work_struct *work)
|
||||
* otherwise the mailbox msg will be ruined/reseted by
|
||||
* the VF FLR.
|
||||
*/
|
||||
if (!down_read_trylock(&adev->reset_sem))
|
||||
if (!down_write_trylock(&adev->reset_sem))
|
||||
return;
|
||||
|
||||
amdgpu_virt_fini_data_exchange(adev);
|
||||
@ -268,7 +268,7 @@ static void xgpu_ai_mailbox_flr_work(struct work_struct *work)
|
||||
|
||||
flr_done:
|
||||
atomic_set(&adev->in_gpu_reset, 0);
|
||||
up_read(&adev->reset_sem);
|
||||
up_write(&adev->reset_sem);
|
||||
|
||||
/* Trigger recovery for world switch failure if no TDR */
|
||||
if (amdgpu_device_should_recover_gpu(adev)
|
||||
|
@ -273,7 +273,7 @@ static void xgpu_nv_mailbox_flr_work(struct work_struct *work)
|
||||
* otherwise the mailbox msg will be ruined/reseted by
|
||||
* the VF FLR.
|
||||
*/
|
||||
if (!down_read_trylock(&adev->reset_sem))
|
||||
if (!down_write_trylock(&adev->reset_sem))
|
||||
return;
|
||||
|
||||
amdgpu_virt_fini_data_exchange(adev);
|
||||
@ -289,7 +289,7 @@ static void xgpu_nv_mailbox_flr_work(struct work_struct *work)
|
||||
|
||||
flr_done:
|
||||
atomic_set(&adev->in_gpu_reset, 0);
|
||||
up_read(&adev->reset_sem);
|
||||
up_write(&adev->reset_sem);
|
||||
|
||||
/* Trigger recovery for world switch failure if no TDR */
|
||||
if (amdgpu_device_should_recover_gpu(adev)
|
||||
|
Loading…
Reference in New Issue
Block a user