[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