[PATCH] drm/amdgpu: fix error handling in amdgpu_cs_process_fence_dep
zhoucm1
zhoucm1 at amd.com
Tue Jul 30 09:34:12 UTC 2019
Looks very clean, Reviewed-by: Chunming Zhou <david1.zhou at amd.com>
On 2019年07月30日 17:18, Christian König wrote:
> We always need to drop the ctx reference and should check
> for errors first and then dereference the fence pointer.
>
> Signed-off-by: Christian König <christian.koenig at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 26 ++++++++++++--------------
> 1 file changed, 12 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> index c691df6f7a57..def029ab5657 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> @@ -1042,29 +1042,27 @@ static int amdgpu_cs_process_fence_dep(struct amdgpu_cs_parser *p,
> return r;
> }
>
> - fence = amdgpu_ctx_get_fence(ctx, entity,
> - deps[i].handle);
> + fence = amdgpu_ctx_get_fence(ctx, entity, deps[i].handle);
> + amdgpu_ctx_put(ctx);
> +
> + if (IS_ERR(fence))
> + return PTR_ERR(fence);
> + else if (!fence)
> + continue;
>
> if (chunk->chunk_id == AMDGPU_CHUNK_ID_SCHEDULED_DEPENDENCIES) {
> - struct drm_sched_fence *s_fence = to_drm_sched_fence(fence);
> + struct drm_sched_fence *s_fence;
> struct dma_fence *old = fence;
>
> + s_fence = to_drm_sched_fence(fence);
> fence = dma_fence_get(&s_fence->scheduled);
> dma_fence_put(old);
> }
>
> - if (IS_ERR(fence)) {
> - r = PTR_ERR(fence);
> - amdgpu_ctx_put(ctx);
> + r = amdgpu_sync_fence(p->adev, &p->job->sync, fence, true);
> + dma_fence_put(fence);
> + if (r)
> return r;
> - } else if (fence) {
> - r = amdgpu_sync_fence(p->adev, &p->job->sync, fence,
> - true);
> - dma_fence_put(fence);
> - amdgpu_ctx_put(ctx);
> - if (r)
> - return r;
> - }
> }
> return 0;
> }
More information about the amd-gfx
mailing list