Commit 88c511de authored by Alex Deucher's avatar Alex Deucher
Browse files

drm/amd/gfx11: move the gfx mutex into the caller



Otherwise we can fail to drop the software mutex when
we fail to take the hardware mutex.

Fixes: 76acba7b ("drm/amdgpu/gfx11: add a mutex for the gfx semaphore")
Reported-by: default avatarDan Carpenter <dan.carpenter@linaro.org>
Reviewed-by: default avatarDan Carpenter <dan.carpenter@linaro.org>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 186fb12e
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -4747,8 +4747,6 @@ int gfx_v11_0_request_gfx_index_mutex(struct amdgpu_device *adev,
{
	u32 i, tmp, val;

	if (req)
		mutex_lock(&adev->gfx.reset_sem_mutex);
	for (i = 0; i < adev->usec_timeout; i++) {
		/* Request with MeId=2, PipeId=0 */
		tmp = REG_SET_FIELD(0, CP_GFX_INDEX_MUTEX, REQUEST, req);
@@ -4769,8 +4767,6 @@ int gfx_v11_0_request_gfx_index_mutex(struct amdgpu_device *adev,
		}
		udelay(1);
	}
	if (!req)
		mutex_unlock(&adev->gfx.reset_sem_mutex);

	if (i >= adev->usec_timeout)
		return -EINVAL;
@@ -4818,8 +4814,10 @@ static int gfx_v11_0_soft_reset(void *handle)
	mutex_unlock(&adev->srbm_mutex);

	/* Try to acquire the gfx mutex before access to CP_VMID_RESET */
	mutex_lock(&adev->gfx.reset_sem_mutex);
	r = gfx_v11_0_request_gfx_index_mutex(adev, true);
	if (r) {
		mutex_unlock(&adev->gfx.reset_sem_mutex);
		DRM_ERROR("Failed to acquire the gfx mutex during soft reset\n");
		return r;
	}
@@ -4834,6 +4832,7 @@ static int gfx_v11_0_soft_reset(void *handle)

	/* release the gfx mutex */
	r = gfx_v11_0_request_gfx_index_mutex(adev, false);
	mutex_unlock(&adev->gfx.reset_sem_mutex);
	if (r) {
		DRM_ERROR("Failed to release the gfx mutex during soft reset\n");
		return r;