On Mon, Jun 9, 2025 at 8:43 AM Sundararaju, Sathishkumar <sasun...@amd.com> wrote: > > > > On 6/6/2025 9:30 PM, Alex Deucher wrote: > > On Fri, Jun 6, 2025 at 7:41 AM Christian König <christian.koe...@amd.com> > > wrote: > >> On 6/6/25 08:43, Alex Deucher wrote: > >>> Going forward, we'll need more than just the vmid. Everything > >>> we need in currently in the amdgpu job structure, so just > >>> pass that in. > >> Please don't the job is just a container for the submission, it should not > >> be part of any reset handling. > >> > >> What information is actually needed here? > > We need job->vmid, job->base.s_fence->finished, job->hw_fence. > There's more/full ip specific reset control possible with job passed to > reset callback and fence/guilty handling moved here. > Wondering, if I can also try to enable reset on vcn non unified queues, > this patch series has relevant examples and makes it > possible to handle it all in the reset callback itself, can try it atop > these changes.
Yes, older VCNs with multiple rings per engine could do something similar to SDMA 4x-5x where we reset the instance so all rings on that instance get reset. Alex > > Regards, > Sathish > > > > Alex > > > >> Regards, > >> Christian. > >> > >> > >>> Signed-off-by: Alex Deucher <alexander.deuc...@amd.com> > >>> --- > >>> drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 2 +- > >>> drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h | 4 ++-- > >>> drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c | 7 ++++--- > >>> drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c | 10 ++++++---- > >>> drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c | 10 ++++++---- > >>> drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 2 +- > >>> drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c | 2 +- > >>> drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c | 3 ++- > >>> drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c | 3 ++- > >>> drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.c | 3 ++- > >>> drivers/gpu/drm/amd/amdgpu/jpeg_v4_0.c | 3 ++- > >>> drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c | 3 ++- > >>> drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_1.c | 3 ++- > >>> drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c | 3 ++- > >>> drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c | 3 ++- > >>> drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c | 3 ++- > >>> drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c | 5 +++-- > >>> drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c | 5 +++-- > >>> drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c | 3 ++- > >>> drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c | 3 ++- > >>> drivers/gpu/drm/amd/amdgpu/vcn_v4_0_5.c | 3 ++- > >>> drivers/gpu/drm/amd/amdgpu/vcn_v5_0_0.c | 3 ++- > >>> 22 files changed, 53 insertions(+), 33 deletions(-) > >>> > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c > >>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c > >>> index ddb9d3269357c..80d4dfebde24f 100644 > >>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c > >>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c > >>> @@ -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); > >>> if (!r) { > >>> if (amdgpu_ring_sched_ready(ring)) > >>> drm_sched_stop(&ring->sched, s_job); > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h > >>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h > >>> index e1f25218943a4..ab5402d7ce9c8 100644 > >>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h > >>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h > >>> @@ -268,7 +268,7 @@ 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, struct amdgpu_job *job); > >>> void (*emit_cleaner_shader)(struct amdgpu_ring *ring); > >>> bool (*is_guilty)(struct amdgpu_ring *ring); > >>> }; > >>> @@ -425,7 +425,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, j) (r)->funcs->reset((r), (j)) > >>> > >>> unsigned int amdgpu_ring_max_ibs(enum amdgpu_ring_type type); > >>> int amdgpu_ring_alloc(struct amdgpu_ring *ring, unsigned ndw); > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c > >>> b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c > >>> index 75ea071744eb5..c58e7040c732a 100644 > >>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c > >>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c > >>> @@ -9522,7 +9522,8 @@ 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, > >>> + struct amdgpu_job *job) > >>> { > >>> struct amdgpu_device *adev = ring->adev; > >>> struct amdgpu_kiq *kiq = &adev->gfx.kiq[0]; > >>> @@ -9547,7 +9548,7 @@ static int gfx_v10_0_reset_kgq(struct amdgpu_ring > >>> *ring, unsigned int vmid) > >>> > >>> addr = amdgpu_bo_gpu_offset(ring->mqd_obj) + > >>> offsetof(struct v10_gfx_mqd, cp_gfx_hqd_active); > >>> - tmp = REG_SET_FIELD(0, CP_VMID_RESET, RESET_REQUEST, 1 << vmid); > >>> + tmp = REG_SET_FIELD(0, CP_VMID_RESET, RESET_REQUEST, 1 << > >>> job->vmid); > >>> if (ring->pipe == 0) > >>> tmp = REG_SET_FIELD(tmp, CP_VMID_RESET, PIPE0_QUEUES, 1 << > >>> ring->queue); > >>> else > >>> @@ -9579,7 +9580,7 @@ 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) > >>> + struct amdgpu_job *job) > >>> { > >>> struct amdgpu_device *adev = ring->adev; > >>> struct amdgpu_kiq *kiq = &adev->gfx.kiq[0]; > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c > >>> b/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c > >>> index afd6d59164bfa..0ee7bdd509741 100644 > >>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c > >>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c > >>> @@ -6806,7 +6806,8 @@ 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, > >>> + struct amdgpu_job *job) > >>> { > >>> struct amdgpu_device *adev = ring->adev; > >>> int r; > >>> @@ -6814,7 +6815,7 @@ static int gfx_v11_0_reset_kgq(struct amdgpu_ring > >>> *ring, unsigned int vmid) > >>> if (amdgpu_sriov_vf(adev)) > >>> return -EINVAL; > >>> > >>> - r = amdgpu_mes_reset_legacy_queue(ring->adev, ring, vmid, false); > >>> + r = amdgpu_mes_reset_legacy_queue(ring->adev, ring, job->vmid, > >>> false); > >>> if (r) { > >>> > >>> dev_warn(adev->dev, "reset via MES failed and try pipe > >>> reset %d\n", r); > >>> @@ -6968,7 +6969,8 @@ 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, > >>> + struct amdgpu_job *job) > >>> { > >>> struct amdgpu_device *adev = ring->adev; > >>> int r = 0; > >>> @@ -6976,7 +6978,7 @@ static int gfx_v11_0_reset_kcq(struct amdgpu_ring > >>> *ring, unsigned int vmid) > >>> if (amdgpu_sriov_vf(adev)) > >>> return -EINVAL; > >>> > >>> - r = amdgpu_mes_reset_legacy_queue(ring->adev, ring, vmid, true); > >>> + r = amdgpu_mes_reset_legacy_queue(ring->adev, ring, job->vmid, > >>> true); > >>> if (r) { > >>> dev_warn(adev->dev, "fail(%d) to reset kcq and try pipe > >>> reset\n", r); > >>> r = gfx_v11_0_reset_compute_pipe(ring); > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c > >>> b/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c > >>> index 1234c8d64e20d..a26417d53411b 100644 > >>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c > >>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c > >>> @@ -5307,7 +5307,8 @@ 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, > >>> + struct amdgpu_job *job) > >>> { > >>> struct amdgpu_device *adev = ring->adev; > >>> int r; > >>> @@ -5315,7 +5316,7 @@ static int gfx_v12_0_reset_kgq(struct amdgpu_ring > >>> *ring, unsigned int vmid) > >>> if (amdgpu_sriov_vf(adev)) > >>> return -EINVAL; > >>> > >>> - r = amdgpu_mes_reset_legacy_queue(ring->adev, ring, vmid, false); > >>> + r = amdgpu_mes_reset_legacy_queue(ring->adev, ring, job->vmid, > >>> false); > >>> if (r) { > >>> dev_warn(adev->dev, "reset via MES failed and try pipe > >>> reset %d\n", r); > >>> r = gfx_v12_reset_gfx_pipe(ring); > >>> @@ -5421,7 +5422,8 @@ 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, > >>> + struct amdgpu_job *job) > >>> { > >>> struct amdgpu_device *adev = ring->adev; > >>> int r; > >>> @@ -5429,7 +5431,7 @@ static int gfx_v12_0_reset_kcq(struct amdgpu_ring > >>> *ring, unsigned int vmid) > >>> if (amdgpu_sriov_vf(adev)) > >>> return -EINVAL; > >>> > >>> - r = amdgpu_mes_reset_legacy_queue(ring->adev, ring, vmid, true); > >>> + r = amdgpu_mes_reset_legacy_queue(ring->adev, ring, job->vmid, > >>> true); > >>> if (r) { > >>> dev_warn(adev->dev, "fail(%d) to reset kcq and try pipe > >>> reset\n", r); > >>> r = gfx_v12_0_reset_compute_pipe(ring); > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c > >>> b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c > >>> index d50e125fd3e0d..5e650cc5fcb26 100644 > >>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c > >>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c > >>> @@ -7153,7 +7153,7 @@ 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) > >>> + struct amdgpu_job *job) > >>> { > >>> struct amdgpu_device *adev = ring->adev; > >>> struct amdgpu_kiq *kiq = &adev->gfx.kiq[0]; > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c > >>> b/drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c > >>> index c233edf605694..a7dadff3dca31 100644 > >>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c > >>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c > >>> @@ -3552,7 +3552,7 @@ 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) > >>> + struct amdgpu_job *job) > >>> { > >>> struct amdgpu_device *adev = ring->adev; > >>> struct amdgpu_kiq *kiq = &adev->gfx.kiq[ring->xcc_id]; > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c > >>> b/drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c > >>> index 4cde8a8bcc837..6cd3fbe00d6b9 100644 > >>> --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c > >>> +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c > >>> @@ -764,7 +764,8 @@ 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, > >>> + struct amdgpu_job *job) > >>> { > >>> jpeg_v2_0_stop(ring->adev); > >>> jpeg_v2_0_start(ring->adev); > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c > >>> b/drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c > >>> index 8b39e114f3be1..8ed41868f6c32 100644 > >>> --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c > >>> +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c > >>> @@ -643,7 +643,8 @@ 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, > >>> + struct amdgpu_job *job) > >>> { > >>> jpeg_v2_5_stop_inst(ring->adev, ring->me); > >>> jpeg_v2_5_start_inst(ring->adev, ring->me); > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.c > >>> b/drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.c > >>> index 2f8510c2986b9..3512fbb543301 100644 > >>> --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.c > >>> +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.c > >>> @@ -555,7 +555,8 @@ 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, > >>> + struct amdgpu_job *job) > >>> { > >>> jpeg_v3_0_stop(ring->adev); > >>> jpeg_v3_0_start(ring->adev); > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0.c > >>> b/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0.c > >>> index f17ec5414fd69..c8efeaf0a2a69 100644 > >>> --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0.c > >>> +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0.c > >>> @@ -720,7 +720,8 @@ 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, > >>> + struct amdgpu_job *job) > >>> { > >>> if (amdgpu_sriov_vf(ring->adev)) > >>> return -EINVAL; > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c > >>> b/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c > >>> index 79e342d5ab28d..8b07c3651c579 100644 > >>> --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c > >>> +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c > >>> @@ -1143,7 +1143,8 @@ 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, > >>> + struct amdgpu_job *job) > >>> { > >>> if (amdgpu_sriov_vf(ring->adev)) > >>> return -EOPNOTSUPP; > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_1.c > >>> b/drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_1.c > >>> index 3b6f65a256464..0a21a13e19360 100644 > >>> --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_1.c > >>> +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_1.c > >>> @@ -834,7 +834,8 @@ 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, > >>> + struct amdgpu_job *job) > >>> { > >>> if (amdgpu_sriov_vf(ring->adev)) > >>> return -EOPNOTSUPP; > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c > >>> b/drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c > >>> index 9c169112a5e7b..ffd67d51b335f 100644 > >>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c > >>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c > >>> @@ -1667,7 +1667,8 @@ 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, > >>> + struct amdgpu_job *job) > >>> { > >>> struct amdgpu_device *adev = ring->adev; > >>> u32 id = GET_INST(SDMA0, ring->me); > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c > >>> b/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c > >>> index 9505ae96fbecc..46affee1c2da0 100644 > >>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c > >>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c > >>> @@ -1538,7 +1538,8 @@ 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, > >>> + struct amdgpu_job *job) > >>> { > >>> struct amdgpu_device *adev = ring->adev; > >>> u32 inst_id = ring->me; > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c > >>> b/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c > >>> index a6e612b4a8928..581e75b7d01a8 100644 > >>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c > >>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c > >>> @@ -1451,7 +1451,8 @@ 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, > >>> + struct amdgpu_job *job) > >>> { > >>> struct amdgpu_device *adev = ring->adev; > >>> u32 inst_id = ring->me; > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c > >>> b/drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c > >>> index 5a70ae17be04e..d9866009edbfc 100644 > >>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c > >>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c > >>> @@ -1537,7 +1537,8 @@ 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, > >>> + struct amdgpu_job *job) > >>> { > >>> struct amdgpu_device *adev = ring->adev; > >>> int i, r; > >>> @@ -1555,7 +1556,7 @@ static int sdma_v6_0_reset_queue(struct amdgpu_ring > >>> *ring, unsigned int vmid) > >>> return -EINVAL; > >>> } > >>> > >>> - r = amdgpu_mes_reset_legacy_queue(adev, ring, vmid, true); > >>> + r = amdgpu_mes_reset_legacy_queue(adev, ring, job->vmid, true); > >>> if (r) > >>> return r; > >>> > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c > >>> b/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c > >>> index ad47d0bdf7775..c546e73642296 100644 > >>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c > >>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c > >>> @@ -802,7 +802,8 @@ 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, > >>> + struct amdgpu_job *job) > >>> { > >>> struct amdgpu_device *adev = ring->adev; > >>> int i, r; > >>> @@ -820,7 +821,7 @@ static int sdma_v7_0_reset_queue(struct amdgpu_ring > >>> *ring, unsigned int vmid) > >>> return -EINVAL; > >>> } > >>> > >>> - r = amdgpu_mes_reset_legacy_queue(adev, ring, vmid, true); > >>> + r = amdgpu_mes_reset_legacy_queue(adev, ring, job->vmid, true); > >>> if (r) > >>> return r; > >>> > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c > >>> b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c > >>> index b5071f77f78d2..47a0deceff433 100644 > >>> --- a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c > >>> +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c > >>> @@ -1967,7 +1967,8 @@ 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, > >>> + struct amdgpu_job *job) > >>> { > >>> struct amdgpu_device *adev = ring->adev; > >>> struct amdgpu_vcn_inst *vinst = &adev->vcn.inst[ring->me]; > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c > >>> b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c > >>> index 5a33140f57235..d961a824d2098 100644 > >>> --- a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c > >>> +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c > >>> @@ -1594,7 +1594,8 @@ 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, > >>> + struct amdgpu_job *job) > >>> { > >>> int r = 0; > >>> int vcn_inst; > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_5.c > >>> b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_5.c > >>> index 16ade84facc78..10bd714592278 100644 > >>> --- a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_5.c > >>> +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_5.c > >>> @@ -1465,7 +1465,8 @@ 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, > >>> + struct amdgpu_job *job) > >>> { > >>> struct amdgpu_device *adev = ring->adev; > >>> struct amdgpu_vcn_inst *vinst = &adev->vcn.inst[ring->me]; > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v5_0_0.c > >>> b/drivers/gpu/drm/amd/amdgpu/vcn_v5_0_0.c > >>> index f8e3f0b882da5..7e6a7ead9a086 100644 > >>> --- a/drivers/gpu/drm/amd/amdgpu/vcn_v5_0_0.c > >>> +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v5_0_0.c > >>> @@ -1192,7 +1192,8 @@ 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, > >>> + struct amdgpu_job *job) > >>> { > >>> struct amdgpu_device *adev = ring->adev; > >>> struct amdgpu_vcn_inst *vinst = &adev->vcn.inst[ring->me]; >