drm/amdgpu: always sending PSP messages LOAD_ASD and UNLOAD_TA
We allow sending PSP messages LOAD_ASD and UNLOAD_TA without acquiring a lock in drm_dev_enter during driver unload because we must call drm_dev_unplug as the beginning of unload driver sequence. Added WARNING if other PSP messages are sent without a lock. After this commit, the following commands would work -sudo modprobe -r amdgpu -sudo modprobe amdgpu Signed-off-by: Vitaly Prosyak <vitaly.prosyak@amd.com> Reviewed-by Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
febb414745
commit
11cc4652e9
@ -606,12 +606,21 @@ psp_cmd_submit_buf(struct psp_context *psp,
|
||||
int timeout = 20000;
|
||||
bool ras_intr = false;
|
||||
bool skip_unsupport = false;
|
||||
bool dev_entered;
|
||||
|
||||
if (psp->adev->no_hw_access)
|
||||
return 0;
|
||||
|
||||
if (!drm_dev_enter(adev_to_drm(psp->adev), &idx))
|
||||
return 0;
|
||||
dev_entered = drm_dev_enter(adev_to_drm(psp->adev), &idx);
|
||||
/*
|
||||
* We allow sending PSP messages LOAD_ASD and UNLOAD_TA without acquiring
|
||||
* a lock in drm_dev_enter during driver unload because we must call
|
||||
* drm_dev_unplug as the beginning of unload driver sequence . It is very
|
||||
* crucial that userspace can't access device instances anymore.
|
||||
*/
|
||||
if (!dev_entered)
|
||||
WARN_ON(psp->cmd_buf_mem->cmd_id != GFX_CMD_ID_LOAD_ASD &&
|
||||
psp->cmd_buf_mem->cmd_id != GFX_CMD_ID_UNLOAD_TA);
|
||||
|
||||
memset(psp->cmd_buf_mem, 0, PSP_CMD_BUFFER_SIZE);
|
||||
|
||||
@ -676,7 +685,8 @@ psp_cmd_submit_buf(struct psp_context *psp,
|
||||
}
|
||||
|
||||
exit:
|
||||
drm_dev_exit(idx);
|
||||
if (dev_entered)
|
||||
drm_dev_exit(idx);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user