[PATCH] drm/amdgpu: Fix vce work queue was not cancelled when suspend
Christian König
ckoenig.leichtzumerken at gmail.com
Thu Sep 27 12:53:46 UTC 2018
Am 27.09.2018 um 14:48 schrieb Rex Zhu:
> The vce cancel_delayed_work_sync never be called.
> driver call the function in error path.
>
> This caused the A+A suspend hang when runtime pm enebled.
> As we will visit the smu in the idle queue. this will cause
> smu hang because the dgpu has been suspend, and the dgpu also
> will be waked up. As the smu has been hang, so the dgpu resume
> will failed.
>
> Signed-off-by: Rex Zhu <Rex.Zhu at amd.com>
Good catch! Patch is Reviewed-by: Christian König
<christian.koenig at amd.com>.
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 3 ++-
> drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 4 ++--
> 2 files changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
> index 0cc5190..5f3f540 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
> @@ -258,6 +258,8 @@ int amdgpu_vce_suspend(struct amdgpu_device *adev)
> {
> int i;
>
> + cancel_delayed_work_sync(&adev->vce.idle_work);
> +
> if (adev->vce.vcpu_bo == NULL)
> return 0;
>
> @@ -268,7 +270,6 @@ int amdgpu_vce_suspend(struct amdgpu_device *adev)
> if (i == AMDGPU_MAX_VCE_HANDLES)
> return 0;
>
> - cancel_delayed_work_sync(&adev->vce.idle_work);
> /* TODO: suspending running encoding sessions isn't supported */
> return -EINVAL;
> }
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
> index a73674f..fb7df63 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
> @@ -162,11 +162,11 @@ int amdgpu_vcn_suspend(struct amdgpu_device *adev)
> unsigned size;
> void *ptr;
>
> + cancel_delayed_work_sync(&adev->vcn.idle_work);
> +
> if (adev->vcn.vcpu_bo == NULL)
> return 0;
>
> - cancel_delayed_work_sync(&adev->vcn.idle_work);
> -
> size = amdgpu_bo_size(adev->vcn.vcpu_bo);
> ptr = adev->vcn.cpu_addr;
>
More information about the amd-gfx
mailing list