]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amdgpu: Fix validating flush_gpu_tlb_pasid()
authorTimur Kristóf <timur.kristof@gmail.com>
Sun, 18 Jan 2026 12:57:46 +0000 (13:57 +0100)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 21 Jan 2026 19:55:44 +0000 (14:55 -0500)
When a function holds a lock and we return without unlocking it,
it deadlocks the kernel. We should always unlock before returning.

This commit fixes suspend/resume on SI.
Tested on two Tahiti GPUs: FirePro W9000 and R9 280X.

Fixes: f4db9913e4d3 ("drm/amdgpu: validate the flush_gpu_tlb_pasid()")
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
Closes: https://lore.kernel.org/r/202601190121.z9C0uml5-lkp@intel.com/
Signed-off-by: Timur Kristóf <timur.kristof@gmail.com>
Signed-off-by: Prike Liang <Prike.Liang@amd.com>
Reviewed-by: Prike Liang <Prike.Liang@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit e3a6eff92bbd960b471966d9afccb4d584546d17)

drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c

index 8924380086c84492100a0d9dce94fad6d889f51a..7e623f91f2d7ca4cd5bb7cb395bfabbad7172c2a 100644 (file)
@@ -733,8 +733,10 @@ int amdgpu_gmc_flush_gpu_tlb_pasid(struct amdgpu_device *adev, uint16_t pasid,
 
        if (!adev->gmc.flush_pasid_uses_kiq || !ring->sched.ready) {
 
-               if (!adev->gmc.gmc_funcs->flush_gpu_tlb_pasid)
-                       return 0;
+               if (!adev->gmc.gmc_funcs->flush_gpu_tlb_pasid) {
+                       r = 0;
+                       goto error_unlock_reset;
+               }
 
                if (adev->gmc.flush_tlb_needs_extra_type_2)
                        adev->gmc.gmc_funcs->flush_gpu_tlb_pasid(adev, pasid,