]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/amdgpu: update ring reset function signature
authorAlex Deucher <alexander.deucher@amd.com>
Thu, 5 Jun 2025 20:12:08 +0000 (16:12 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 30 Jun 2025 15:57:16 +0000 (11:57 -0400)
Going forward, we'll need more than just the vmid.  Add the
guilty amdgpu_fence.

Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
22 files changed:
drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c
drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c
drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c
drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c
drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.c
drivers/gpu/drm/amd/amdgpu/jpeg_v4_0.c
drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c
drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_1.c
drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c
drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c
drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c
drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c
drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c
drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c
drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c
drivers/gpu/drm/amd/amdgpu/vcn_v4_0_5.c
drivers/gpu/drm/amd/amdgpu/vcn_v5_0_0.c

index ddb9d3269357cf3fd3ce2393f798a08fbd6d9c2a..a7ff1fa4c778ec1311f25e51ddbb2a3ec03038e7 100644 (file)
@@ -155,7 +155,7 @@ static enum drm_gpu_sched_stat amdgpu_job_timedout(struct drm_sched_job *s_job)
                if (is_guilty)
                        dma_fence_set_error(&s_job->s_fence->finished, -ETIME);
 
-               r = amdgpu_ring_reset(ring, job->vmid);
+               r = amdgpu_ring_reset(ring, job->vmid, NULL);
                if (!r) {
                        if (amdgpu_ring_sched_ready(ring))
                                drm_sched_stop(&ring->sched, s_job);
index 9ae522baad8e7f27a0e31a9762d237400e4ad562..de972f69d96e70a613e20c696b28a5bdbbc9ec6e 100644 (file)
@@ -268,7 +268,8 @@ struct amdgpu_ring_funcs {
        void (*patch_cntl)(struct amdgpu_ring *ring, unsigned offset);
        void (*patch_ce)(struct amdgpu_ring *ring, unsigned offset);
        void (*patch_de)(struct amdgpu_ring *ring, unsigned offset);
-       int (*reset)(struct amdgpu_ring *ring, unsigned int vmid);
+       int (*reset)(struct amdgpu_ring *ring, unsigned int vmid,
+                    struct amdgpu_fence *timedout_fence);
        void (*emit_cleaner_shader)(struct amdgpu_ring *ring);
        bool (*is_guilty)(struct amdgpu_ring *ring);
 };
@@ -425,7 +426,7 @@ struct amdgpu_ring {
 #define amdgpu_ring_patch_cntl(r, o) ((r)->funcs->patch_cntl((r), (o)))
 #define amdgpu_ring_patch_ce(r, o) ((r)->funcs->patch_ce((r), (o)))
 #define amdgpu_ring_patch_de(r, o) ((r)->funcs->patch_de((r), (o)))
-#define amdgpu_ring_reset(r, v) (r)->funcs->reset((r), (v))
+#define amdgpu_ring_reset(r, v, f) (r)->funcs->reset((r), (v), (f))
 
 unsigned int amdgpu_ring_max_ibs(enum amdgpu_ring_type type);
 int amdgpu_ring_alloc(struct amdgpu_ring *ring, unsigned ndw);
index 75ea071744eb5e23606fd648e60b6bb14412ece1..4b2af95203b26732db05f34e5b53c220dd9e592f 100644 (file)
@@ -9522,7 +9522,9 @@ static void gfx_v10_ring_insert_nop(struct amdgpu_ring *ring, uint32_t num_nop)
        amdgpu_ring_insert_nop(ring, num_nop - 1);
 }
 
-static int gfx_v10_0_reset_kgq(struct amdgpu_ring *ring, unsigned int vmid)
+static int gfx_v10_0_reset_kgq(struct amdgpu_ring *ring,
+                              unsigned int vmid,
+                              struct amdgpu_fence *timedout_fence)
 {
        struct amdgpu_device *adev = ring->adev;
        struct amdgpu_kiq *kiq = &adev->gfx.kiq[0];
@@ -9579,7 +9581,8 @@ static int gfx_v10_0_reset_kgq(struct amdgpu_ring *ring, unsigned int vmid)
 }
 
 static int gfx_v10_0_reset_kcq(struct amdgpu_ring *ring,
-                              unsigned int vmid)
+                              unsigned int vmid,
+                              struct amdgpu_fence *timedout_fence)
 {
        struct amdgpu_device *adev = ring->adev;
        struct amdgpu_kiq *kiq = &adev->gfx.kiq[0];
index ec9b84f92d4670b6ac01c37fe1b4e44b7990a700..8d5c0ab016d2b03d94e5e21b54c47a8a346d18ea 100644 (file)
@@ -6811,7 +6811,9 @@ static int gfx_v11_reset_gfx_pipe(struct amdgpu_ring *ring)
        return 0;
 }
 
-static int gfx_v11_0_reset_kgq(struct amdgpu_ring *ring, unsigned int vmid)
+static int gfx_v11_0_reset_kgq(struct amdgpu_ring *ring,
+                              unsigned int vmid,
+                              struct amdgpu_fence *timedout_fence)
 {
        struct amdgpu_device *adev = ring->adev;
        int r;
@@ -6973,7 +6975,9 @@ static int gfx_v11_0_reset_compute_pipe(struct amdgpu_ring *ring)
        return 0;
 }
 
-static int gfx_v11_0_reset_kcq(struct amdgpu_ring *ring, unsigned int vmid)
+static int gfx_v11_0_reset_kcq(struct amdgpu_ring *ring,
+                              unsigned int vmid,
+                              struct amdgpu_fence *timedout_fence)
 {
        struct amdgpu_device *adev = ring->adev;
        int r = 0;
index 1234c8d64e20d9e8d929bab7440ab9861acc44a4..795bd353a9ceaa222dc89144b5d490c40a2b1d93 100644 (file)
@@ -5307,7 +5307,9 @@ static int gfx_v12_reset_gfx_pipe(struct amdgpu_ring *ring)
        return 0;
 }
 
-static int gfx_v12_0_reset_kgq(struct amdgpu_ring *ring, unsigned int vmid)
+static int gfx_v12_0_reset_kgq(struct amdgpu_ring *ring,
+                              unsigned int vmid,
+                              struct amdgpu_fence *timedout_fence)
 {
        struct amdgpu_device *adev = ring->adev;
        int r;
@@ -5421,7 +5423,9 @@ static int gfx_v12_0_reset_compute_pipe(struct amdgpu_ring *ring)
        return 0;
 }
 
-static int gfx_v12_0_reset_kcq(struct amdgpu_ring *ring, unsigned int vmid)
+static int gfx_v12_0_reset_kcq(struct amdgpu_ring *ring,
+                              unsigned int vmid,
+                              struct amdgpu_fence *timedout_fence)
 {
        struct amdgpu_device *adev = ring->adev;
        int r;
index 866e39f6fab3f1ed3aaed8b3bed838e415774e35..d91e0423c4820631ffc9a7bcc30446e20096600a 100644 (file)
@@ -7172,7 +7172,8 @@ static void gfx_v9_ring_insert_nop(struct amdgpu_ring *ring, uint32_t num_nop)
 }
 
 static int gfx_v9_0_reset_kcq(struct amdgpu_ring *ring,
-                             unsigned int vmid)
+                             unsigned int vmid,
+                             struct amdgpu_fence *timedout_fence)
 {
        struct amdgpu_device *adev = ring->adev;
        struct amdgpu_kiq *kiq = &adev->gfx.kiq[0];
index c233edf605694c8661b9270a71c5ba437a2f0f2d..272f0f8e41d453de39e69e9be55e1b876bcfcc93 100644 (file)
@@ -3552,7 +3552,8 @@ static int gfx_v9_4_3_reset_hw_pipe(struct amdgpu_ring *ring)
 }
 
 static int gfx_v9_4_3_reset_kcq(struct amdgpu_ring *ring,
-                               unsigned int vmid)
+                               unsigned int vmid,
+                               struct amdgpu_fence *timedout_fence)
 {
        struct amdgpu_device *adev = ring->adev;
        struct amdgpu_kiq *kiq = &adev->gfx.kiq[ring->xcc_id];
index 4cde8a8bcc837aae0ea293b2f585f8b84529c29f..93eb71d2ce304a2b20b0a7f280123c35842f849f 100644 (file)
@@ -764,7 +764,9 @@ static int jpeg_v2_0_process_interrupt(struct amdgpu_device *adev,
        return 0;
 }
 
-static int jpeg_v2_0_ring_reset(struct amdgpu_ring *ring, unsigned int vmid)
+static int jpeg_v2_0_ring_reset(struct amdgpu_ring *ring,
+                               unsigned int vmid,
+                               struct amdgpu_fence *timedout_fence)
 {
        jpeg_v2_0_stop(ring->adev);
        jpeg_v2_0_start(ring->adev);
index 8b39e114f3be144e83d70f2fc2a5c511246c9799..45b8702d20ad943ced5b987ad6acaa860013d87e 100644 (file)
@@ -643,7 +643,9 @@ static int jpeg_v2_5_process_interrupt(struct amdgpu_device *adev,
        return 0;
 }
 
-static int jpeg_v2_5_ring_reset(struct amdgpu_ring *ring, unsigned int vmid)
+static int jpeg_v2_5_ring_reset(struct amdgpu_ring *ring,
+                               unsigned int vmid,
+                               struct amdgpu_fence *timedout_fence)
 {
        jpeg_v2_5_stop_inst(ring->adev, ring->me);
        jpeg_v2_5_start_inst(ring->adev, ring->me);
index 2f8510c2986b9ac73cb294d89e379a4b2f6a350f..9bd0ae4a24a1ae8bf614601c31e9f752630b0952 100644 (file)
@@ -555,7 +555,9 @@ static int jpeg_v3_0_process_interrupt(struct amdgpu_device *adev,
        return 0;
 }
 
-static int jpeg_v3_0_ring_reset(struct amdgpu_ring *ring, unsigned int vmid)
+static int jpeg_v3_0_ring_reset(struct amdgpu_ring *ring,
+                               unsigned int vmid,
+                               struct amdgpu_fence *timedout_fence)
 {
        jpeg_v3_0_stop(ring->adev);
        jpeg_v3_0_start(ring->adev);
index f17ec5414fd69d726b489eeb5d57a6b8ff6d3589..4fc1ef85b2945bdb0888bb94ea0b76d3230fb7f7 100644 (file)
@@ -720,7 +720,9 @@ static int jpeg_v4_0_process_interrupt(struct amdgpu_device *adev,
        return 0;
 }
 
-static int jpeg_v4_0_ring_reset(struct amdgpu_ring *ring, unsigned int vmid)
+static int jpeg_v4_0_ring_reset(struct amdgpu_ring *ring,
+                               unsigned int vmid,
+                               struct amdgpu_fence *timedout_fence)
 {
        if (amdgpu_sriov_vf(ring->adev))
                return -EINVAL;
index 79e342d5ab28d87f39e43afdc9dd0c0e97bf937d..bdc7612ba56a515c7a9822ef304e50362424c6e0 100644 (file)
@@ -1143,7 +1143,9 @@ static void jpeg_v4_0_3_core_stall_reset(struct amdgpu_ring *ring)
        WREG32_SOC15(JPEG, jpeg_inst, regJPEG_CORE_RST_CTRL, 0x00);
 }
 
-static int jpeg_v4_0_3_ring_reset(struct amdgpu_ring *ring, unsigned int vmid)
+static int jpeg_v4_0_3_ring_reset(struct amdgpu_ring *ring,
+                                 unsigned int vmid,
+                                 struct amdgpu_fence *timedout_fence)
 {
        if (amdgpu_sriov_vf(ring->adev))
                return -EOPNOTSUPP;
index 3b6f65a256464a949788ebaae7b1dda727de1c97..aee4f50a0f52e71e6b0b11bc91c194cab127ba83 100644 (file)
@@ -834,7 +834,9 @@ static void jpeg_v5_0_1_core_stall_reset(struct amdgpu_ring *ring)
        WREG32_SOC15(JPEG, jpeg_inst, regJPEG_CORE_RST_CTRL, 0x00);
 }
 
-static int jpeg_v5_0_1_ring_reset(struct amdgpu_ring *ring, unsigned int vmid)
+static int jpeg_v5_0_1_ring_reset(struct amdgpu_ring *ring,
+                                 unsigned int vmid,
+                                 struct amdgpu_fence *timedout_fence)
 {
        if (amdgpu_sriov_vf(ring->adev))
                return -EOPNOTSUPP;
index 08ddef027f21ff35ebfbd32f0b187b0dfb3bef23..b8828432c98a3a8315c8275844524123a86aac09 100644 (file)
@@ -1675,7 +1675,9 @@ static bool sdma_v4_4_2_page_ring_is_guilty(struct amdgpu_ring *ring)
        return sdma_v4_4_2_is_queue_selected(adev, instance_id, true);
 }
 
-static int sdma_v4_4_2_reset_queue(struct amdgpu_ring *ring, unsigned int vmid)
+static int sdma_v4_4_2_reset_queue(struct amdgpu_ring *ring,
+                                  unsigned int vmid,
+                                  struct amdgpu_fence *timedout_fence)
 {
        struct amdgpu_device *adev = ring->adev;
        u32 id = ring->me;
index 37f4b5b4a098ff4311845d5e8548012de8882c69..2fd72c85cf0148d3d06865c2476da3b5e63ddf25 100644 (file)
@@ -1539,7 +1539,9 @@ static int sdma_v5_0_soft_reset(struct amdgpu_ip_block *ip_block)
        return 0;
 }
 
-static int sdma_v5_0_reset_queue(struct amdgpu_ring *ring, unsigned int vmid)
+static int sdma_v5_0_reset_queue(struct amdgpu_ring *ring,
+                                unsigned int vmid,
+                                struct amdgpu_fence *timedout_fence)
 {
        struct amdgpu_device *adev = ring->adev;
        u32 inst_id = ring->me;
index 0b40411b92a0b8a031a7926a6ebc7da412be4802..21421f1bd209584070d0c3b7c0cdf4eda4ffab46 100644 (file)
@@ -1452,7 +1452,9 @@ static int sdma_v5_2_wait_for_idle(struct amdgpu_ip_block *ip_block)
        return -ETIMEDOUT;
 }
 
-static int sdma_v5_2_reset_queue(struct amdgpu_ring *ring, unsigned int vmid)
+static int sdma_v5_2_reset_queue(struct amdgpu_ring *ring,
+                                unsigned int vmid,
+                                struct amdgpu_fence *timedout_fence)
 {
        struct amdgpu_device *adev = ring->adev;
        u32 inst_id = ring->me;
index a9bdf8d61d6ce75794b24b2cd25e0703e94cb2f5..2455965387e07e83d706ede7337a3d93de145f2b 100644 (file)
@@ -1550,7 +1550,9 @@ static int sdma_v6_0_ring_preempt_ib(struct amdgpu_ring *ring)
        return r;
 }
 
-static int sdma_v6_0_reset_queue(struct amdgpu_ring *ring, unsigned int vmid)
+static int sdma_v6_0_reset_queue(struct amdgpu_ring *ring,
+                                unsigned int vmid,
+                                struct amdgpu_fence *timedout_fence)
 {
        struct amdgpu_device *adev = ring->adev;
        int i, r;
index 86903eccbd4e5764331d1ce7d413f86560435340..6210be7e4a52f6bae31451708b994bc6ba4a5c6e 100644 (file)
@@ -802,7 +802,9 @@ static bool sdma_v7_0_check_soft_reset(struct amdgpu_ip_block *ip_block)
        return false;
 }
 
-static int sdma_v7_0_reset_queue(struct amdgpu_ring *ring, unsigned int vmid)
+static int sdma_v7_0_reset_queue(struct amdgpu_ring *ring,
+                                unsigned int vmid,
+                                struct amdgpu_fence *timedout_fence)
 {
        struct amdgpu_device *adev = ring->adev;
        int i, r;
index b5071f77f78d233510587f8e9013d7e194b67cd0..244359fa4aacb1e2bb5053210b97552480073884 100644 (file)
@@ -1967,7 +1967,9 @@ static int vcn_v4_0_ring_patch_cs_in_place(struct amdgpu_cs_parser *p,
        return 0;
 }
 
-static int vcn_v4_0_ring_reset(struct amdgpu_ring *ring, unsigned int vmid)
+static int vcn_v4_0_ring_reset(struct amdgpu_ring *ring,
+                              unsigned int vmid,
+                              struct amdgpu_fence *timedout_fence)
 {
        struct amdgpu_device *adev = ring->adev;
        struct amdgpu_vcn_inst *vinst = &adev->vcn.inst[ring->me];
index 5a33140f5723519ac9d2b3b6726a92aee3b57d7c..75c07ebf7fe4b6a14f8523ef9a630fcc85abc1ec 100644 (file)
@@ -1594,7 +1594,9 @@ static void vcn_v4_0_3_unified_ring_set_wptr(struct amdgpu_ring *ring)
        }
 }
 
-static int vcn_v4_0_3_ring_reset(struct amdgpu_ring *ring, unsigned int vmid)
+static int vcn_v4_0_3_ring_reset(struct amdgpu_ring *ring,
+                                unsigned int vmid,
+                                struct amdgpu_fence *timedout_fence)
 {
        int r = 0;
        int vcn_inst;
index 16ade84facc789e1311c8bf08e54b0a3b046f121..731f7762c3e0abb92f73794d0734f9d1f6110857 100644 (file)
@@ -1465,7 +1465,9 @@ static void vcn_v4_0_5_unified_ring_set_wptr(struct amdgpu_ring *ring)
        }
 }
 
-static int vcn_v4_0_5_ring_reset(struct amdgpu_ring *ring, unsigned int vmid)
+static int vcn_v4_0_5_ring_reset(struct amdgpu_ring *ring,
+                                unsigned int vmid,
+                                struct amdgpu_fence *timedout_fence)
 {
        struct amdgpu_device *adev = ring->adev;
        struct amdgpu_vcn_inst *vinst = &adev->vcn.inst[ring->me];
index f8e3f0b882da563f614c60f9df2a04e9b512791c..f975994b3ff44fc1fa3d318dc547be30f920b8dd 100644 (file)
@@ -1192,7 +1192,9 @@ static void vcn_v5_0_0_unified_ring_set_wptr(struct amdgpu_ring *ring)
        }
 }
 
-static int vcn_v5_0_0_ring_reset(struct amdgpu_ring *ring, unsigned int vmid)
+static int vcn_v5_0_0_ring_reset(struct amdgpu_ring *ring,
+                                unsigned int vmid,
+                                struct amdgpu_fence *timedout_fence)
 {
        struct amdgpu_device *adev = ring->adev;
        struct amdgpu_vcn_inst *vinst = &adev->vcn.inst[ring->me];