]> git.hungrycats.org Git - linux/commitdiff
drm/amdgpu: don't reemit if there is nothing to reemit
authorAlex Deucher <alexander.deucher@amd.com>
Fri, 15 May 2026 13:56:07 +0000 (09:56 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 17 Jun 2026 19:51:33 +0000 (15:51 -0400)
Return early in amdgpu_ring_set_fence_errors_and_reemit()
if ring_backup_entries_to_copy is 0.  That means that either
the ring is idle and there is nothing to reemit, or there
some reason why we should reemit, so return early and
signal the fences (if applicable).

Reviewed-by: Jesse Zhang <jesse.zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c

index ea69b1bac7c6e71fe418dec0dd328e77f6a87ed2..6a43c8494fa8cb3bf5150f411f1dd051c6e6c771 100644 (file)
@@ -727,6 +727,15 @@ void amdgpu_ring_set_fence_errors_and_reemit(struct amdgpu_ring *ring,
        last_seq = amdgpu_fence_read(ring) & ring->fence_drv.num_fences_mask;
        seq = ring->fence_drv.sync_seq & ring->fence_drv.num_fences_mask;
 
+       /* If there is nothing to reemit, return early and set an error on the fence
+        * if applicable. If all of the fences are siganlled, this will be a nop.
+        * if there are still fences and ring_backup_entries_to_copy is 0, then
+        * we are skipping it on purpose.
+        */
+       if (!ring->ring_backup_entries_to_copy) {
+               amdgpu_fence_driver_force_completion(ring, &guilty_fence->base);
+               return;
+       }
        ring->reemit = true;
        amdgpu_ring_alloc(ring, ring->ring_backup_entries_to_copy);
        spin_lock_irqsave(&ring->fence_drv.lock, flags);