This set contains a number of bug fixes and cleanups for IB handling that I worked on over the holidays. The first the three patches from V1 are already reviewed, so I didn't include them in V2 or V3. The first patches from V3 have been reviewed so I did not include them either.
Patch 1: Fix for ring resets. No change in V6. Patches 2-4: Removes the direct submit path for IBs and requires that all IB submissions use a job structure. This greatly simplifies the IB submission code. V2 uses GFP_ATOMIC when in reset. V3 sqaushes all of the IP changes into one patch. Not sure there is much value breaking this out per IP. V4 uses the pool type to determine the alloc flags. No changes in V6. Patches 5-9: Improvements for adapter resets. Properly add the bad job back to the pending list so we can stop calling drm_sched_stop/start(). Return the proper error number in the CS IOCTL when the context is guilty. Now that that is handled properly we can call drm_sched_increase_karma() for ring resets as well. Properly set the error on the the timedout fence for adapter resets. These changes also resulted in a small clean up the the VCN reset helper. No changes in V5 or V6. Patch 10-11: Rework the backup and reemit code for per ring reset so that we can safely reemit repeatedly. This removes the current single reemit limit currently in place. V4 saves and restores the fences rather than emitting them directly and also saves and reemits the vm flush contents. V5 simplifies and further cleans things up. V6 reworks the IB schedule sequence to cleanly split the vm fence state from the IB fence state. This greatly simplifies the reemit code as the VM state is no longer intermixed with the IB state. Git tree available as well: https://gitlab.freedesktop.org/agd5f/linux/-/commits/ib_improvements6?ref_type=heads Alex Deucher (11): drm/amdgpu: re-add the bad job to the pending list for ring resets drm/amdgpu/job: use GFP_ATOMIC while in gpu reset drm/amdgpu: switch all IPs to using job for IBs drm/amdgpu: require a job to schedule an IB drm/amdgpu: don't call drm_sched_stop/start() in asic reset drm/amdgpu/cs: return -ETIME for guilty contexts drm/amdgpu: plumb timedout fence through to force completion drm/amdgpu: simplify VCN reset helper drm/amdgpu: Call drm_sched_increase_karma() for ring resets drm/amdgpu: reorder IB schedule sequence drm/amdgpu: rework ring reset backup and reemit v6 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 4 +- drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 4 +- drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 13 +- drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c | 124 ++++++++-------- drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c | 154 +++++++++----------- drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 26 +++- drivers/gpu/drm/amd/amdgpu/amdgpu_job.h | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_object.h | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 50 ++----- drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h | 26 ++-- drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c | 5 +- drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c | 4 +- drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 52 +++---- drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 7 + drivers/gpu/drm/amd/amdgpu/amdgpu_vpe.c | 37 +++-- drivers/gpu/drm/amd/amdgpu/cik_sdma.c | 31 ++-- drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c | 29 ++-- drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c | 29 ++-- drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c | 29 ++-- drivers/gpu/drm/amd/amdgpu/gfx_v12_1.c | 29 ++-- drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c | 24 +-- drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 25 ++-- drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 139 +++++++++--------- drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 138 +++++++++--------- drivers/gpu/drm/amd/amdgpu/gfx_v9_4_2.c | 26 +--- drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c | 29 ++-- drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | 38 ++--- drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 38 ++--- drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | 38 ++--- drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c | 38 ++--- drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c | 37 ++--- drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c | 36 +++-- drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c | 36 +++-- drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c | 36 +++-- drivers/gpu/drm/amd/amdgpu/sdma_v7_1.c | 36 +++-- drivers/gpu/drm/amd/amdgpu/si_dma.c | 29 ++-- drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c | 2 +- drivers/gpu/drm/amd/amdgpu/vcn_v5_0_1.c | 2 +- 40 files changed, 717 insertions(+), 691 deletions(-) -- 2.52.0
