mirror of
https://github.com/torvalds/linux.git
synced 2024-09-20 06:53:04 +00:00
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: 76acba7b7f
("drm/amdgpu/gfx11: add a mutex for the gfx semaphore")
Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
186fb12e7a
commit
88c511dea1
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue
Block a user