Commit 11cc4652 authored by Vitaly Prosyak's avatar Vitaly Prosyak Committed by Alex Deucher
Browse files

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: default avatarVitaly Prosyak <vitaly.prosyak@amd.com>
Reviewed-by Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent febb4147
Loading
Loading
Loading
Loading
+13 −3
Original line number Diff line number Diff line
@@ -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,6 +685,7 @@ psp_cmd_submit_buf(struct psp_context *psp,
	}

exit:
	if (dev_entered)
		drm_dev_exit(idx);
	return ret;
}