On Mon, Aug 30, 2021 at 2:24 AM Guchun Chen <guchun.chen@xxxxxxx> wrote: > > This gurantees no more work on the ring can be submitted > to hardware in suspend/resume case, otherwise a potential > race will occur and the ring will get no chance to stay > empty before suspend. > > v2: Call drm_sched_resubmit_job before drm_sched_start to > restart jobs from the pending list. > > Suggested-by: Andrey Grodzovsky <andrey.grodzovsky@xxxxxxx> > Suggested-by: Christian König <christian.koenig@xxxxxxx> > Signed-off-by: Guchun Chen <guchun.chen@xxxxxxx> Maybe add: Fixes: 067f44c8b459 ("drm/amdgpu: avoid over-handle of fence driver fini in s3 test (v2)") ? Alex > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c > index b439eb7d4177..fd4ba076ff8a 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c > @@ -552,6 +552,9 @@ void amdgpu_fence_driver_hw_fini(struct amdgpu_device *adev) > if (!ring || !ring->fence_drv.initialized) > continue; > > + if (!ring->no_scheduler) > + drm_sched_stop(&ring->sched, NULL); > + > /* You can't wait for HW to signal if it's gone */ > if (!drm_dev_is_unplugged(&adev->ddev)) > r = amdgpu_fence_wait_empty(ring); > @@ -611,6 +614,11 @@ void amdgpu_fence_driver_hw_init(struct amdgpu_device *adev) > if (!ring || !ring->fence_drv.initialized) > continue; > > + if (!ring->no_scheduler) { > + drm_sched_resubmit_jobs(&ring->sched); > + drm_sched_start(&ring->sched, true); > + } > + > /* enable the interrupt */ > if (ring->fence_drv.irq_src) > amdgpu_irq_get(adev, ring->fence_drv.irq_src, > -- > 2.17.1 >