]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amdgpu/sdma5.x: suspend KFD queues in ring reset
authorAlex Deucher <alexander.deucher@amd.com>
Mon, 16 Jun 2025 18:04:54 +0000 (14:04 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 30 Jun 2025 17:51:07 +0000 (13:51 -0400)
SDMA 5.x only supports engine soft reset which resets
all queues on the engine.  As such, we need to suspend
KFD queues around resets like we do for SDMA 4.x.

Reviewed-by: Jesse Zhang <Jesse.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 61feed0baa1a0d094af0e07e968b1e6e875f07d0)

drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c
drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c

index 1813c3ed0aa6042acab9dcb384756ea8a5cd02c1..37f4b5b4a098ff4311845d5e8548012de8882c69 100644 (file)
@@ -1543,8 +1543,13 @@ static int sdma_v5_0_reset_queue(struct amdgpu_ring *ring, unsigned int vmid)
 {
        struct amdgpu_device *adev = ring->adev;
        u32 inst_id = ring->me;
+       int r;
+
+       amdgpu_amdkfd_suspend(adev, true);
+       r = amdgpu_sdma_reset_engine(adev, inst_id);
+       amdgpu_amdkfd_resume(adev, true);
 
-       return amdgpu_sdma_reset_engine(adev, inst_id);
+       return r;
 }
 
 static int sdma_v5_0_stop_queue(struct amdgpu_ring *ring)
index 23f97da6280877bffbb48afa958b36bbe40b1ddf..0b40411b92a0b8a031a7926a6ebc7da412be4802 100644 (file)
@@ -1456,8 +1456,13 @@ static int sdma_v5_2_reset_queue(struct amdgpu_ring *ring, unsigned int vmid)
 {
        struct amdgpu_device *adev = ring->adev;
        u32 inst_id = ring->me;
+       int r;
+
+       amdgpu_amdkfd_suspend(adev, true);
+       r = amdgpu_sdma_reset_engine(adev, inst_id);
+       amdgpu_amdkfd_resume(adev, true);
 
-       return amdgpu_sdma_reset_engine(adev, inst_id);
+       return r;
 }
 
 static int sdma_v5_2_stop_queue(struct amdgpu_ring *ring)