[PATCH] drm/amdgpu: stop scheduler when calling hw_fini (v2)

Alex Deucher alexdeucher at gmail.com
Tue Aug 31 14:14:23 UTC 2021


On Mon, Aug 30, 2021 at 2:24 AM Guchun Chen <guchun.chen at amd.com> 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 at amd.com>
> Suggested-by: Christian König <christian.koenig at amd.com>
> Signed-off-by: Guchun Chen <guchun.chen at amd.com>

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
>


More information about the amd-gfx mailing list