amdgpu_ring_set_fence_errors_and_reemit() unconditionally dereferenced
guilty_fence when ring_backup_entries_to_copy is zero, which can happen
when queue reset runs without a tracked guilty fence.

Pass NULL safely to amdgpu_fence_driver_force_completion() when no
guilty fence is available, avoiding a NULL pointer dereference while
keeping reset/recovery flow unchanged.

Signed-off-by: Jesse Zhang <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
index 3043ad041bb4..ff1a82a4cdac 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
@@ -733,7 +733,8 @@ void amdgpu_ring_set_fence_errors_and_reemit(struct 
amdgpu_ring *ring,
         * we are skipping it on purpose.
         */
        if (!ring->ring_backup_entries_to_copy) {
-               amdgpu_fence_driver_force_completion(ring, &guilty_fence->base);
+               amdgpu_fence_driver_force_completion(ring,
+                       guilty_fence ? &guilty_fence->base : NULL);
                return;
        }
        ring->reemit = true;
-- 
2.49.0

Reply via email to