Skip to content

Commit 4cd15a3

Browse files
diandersrobclark
authored andcommitted
drm/msm/a6xx: Make GPU destroy a bit safer
If, for whatever reason, we're trying process adreno_runtime_resume() at the same time that a6xx_destroy() is running then things can go boom. Specifically adreno_runtime_resume() will eventually call a6xx_pm_resume() and that may try to resume the gmu. Let's grab the GMU lock as we're destroying the GMU. That will solve the race because a6xx_pm_resume() grabs the same lock. That makes the access of `gmu->initialized` in a6xx_gmu_resume() safe. We'll also return an error code in a6xx_gmu_resume() if we see that `gmu->initialized` was false. If this happens we'll bail out of the rest of a6xx_pm_resume(), which is good because the rest of that function is also not good to do if we're racing with a6xx_destroy(). Signed-off-by: Douglas Anderson <[email protected]> Patchwork: https://patchwork.freedesktop.org/patch/521232/ Link: https://lore.kernel.org/r/20230202104822.1.I0e49003bf4dd1dead9be4a29dbee41f3b1236e48@changeid Signed-off-by: Rob Clark <[email protected]>
1 parent 796762f commit 4cd15a3

File tree

2 files changed

+3
-1
lines changed

2 files changed

+3
-1
lines changed

drivers/gpu/drm/msm/adreno/a6xx_gmu.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -974,7 +974,7 @@ int a6xx_gmu_resume(struct a6xx_gpu *a6xx_gpu)
974974
int status, ret;
975975

976976
if (WARN(!gmu->initialized, "The GMU is not set up yet\n"))
977-
return 0;
977+
return -EINVAL;
978978

979979
gmu->hung = false;
980980

drivers/gpu/drm/msm/adreno/a6xx_gpu.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1746,7 +1746,9 @@ static void a6xx_destroy(struct msm_gpu *gpu)
17461746

17471747
a6xx_llc_slices_destroy(a6xx_gpu);
17481748

1749+
mutex_lock(&a6xx_gpu->gmu.lock);
17491750
a6xx_gmu_remove(a6xx_gpu);
1751+
mutex_unlock(&a6xx_gpu->gmu.lock);
17501752

17511753
adreno_gpu_cleanup(adreno_gpu);
17521754

0 commit comments

Comments
 (0)