drm/amdgpu: stop resubmitting jobs for GPU reset v2
authorChristian König <christian.koenig@amd.com>
Wed, 26 Oct 2022 10:57:44 +0000 (12:57 +0200)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 15 Nov 2022 20:25:37 +0000 (15:25 -0500)
Re-submitting IBs by the kernel has many problems because pre-
requisite state is not automatically re-created as well. In
other words neither binary semaphores nor things like ring
buffer pointers are in the state they should be when the
hardware starts to work on the IBs again.

Additional to that even after more than 5 years of
developing this feature it is still not stable and we have
massively problems getting the reference counts right.

As discussed with user space developers this behavior is not
helpful in the first place. For graphics and multimedia
workloads it makes much more sense to either completely
re-create the context or at least re-submitting the IBs
from userspace.

For compute use cases re-submitting is also not very
helpful since userspace must rely on the accuracy of
the result.

Because of this we stop this practice and instead just
properly note that the fence submission was canceled. The
only use case we keep the re-submission for now is SRIOV
and function level resets.

v2: as suggested by Sshaoyun stop resubmitting jobs even for SRIOV

Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c

index 2a8166f..62b5080 100644 (file)
@@ -5305,11 +5305,7 @@ skip_hw_reset:
                        if (!ring || !ring->sched.thread)
                                continue;
 
-                       /* No point to resubmit jobs if we didn't HW reset*/
-                       if (!tmp_adev->asic_reset_res && !job_signaled)
-                               drm_sched_resubmit_jobs(&ring->sched);
-
-                       drm_sched_start(&ring->sched, !tmp_adev->asic_reset_res);
+                       drm_sched_start(&ring->sched, true);
                }
 
                if (adev->enable_mes && adev->ip_versions[GC_HWIP][0] != IP_VERSION(11, 0, 3))