Re: [PATCH] drm/amdgpu: fix dma_fence_wait without reference

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Reviewed-by: Chunming Zhou <david1.zhou@xxxxxxx>

在 2019/8/16 21:21, Christian König 写道:
> We need to grab a reference to the fence we wait for.
>
> Signed-off-by: Christian König <christian.koenig@xxxxxxx>
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c | 27 ++++++++++++++-----------
>   1 file changed, 15 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
> index f539a2a92774..7398b4850649 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
> @@ -534,21 +534,24 @@ int amdgpu_ctx_wait_prev_fence(struct amdgpu_ctx *ctx,
>   			       struct drm_sched_entity *entity)
>   {
>   	struct amdgpu_ctx_entity *centity = to_amdgpu_ctx_entity(entity);
> -	unsigned idx = centity->sequence & (amdgpu_sched_jobs - 1);
> -	struct dma_fence *other = centity->fences[idx];
> +	struct dma_fence *other;
> +	unsigned idx;
> +	long r;
>   
> -	if (other) {
> -		signed long r;
> -		r = dma_fence_wait(other, true);
> -		if (r < 0) {
> -			if (r != -ERESTARTSYS)
> -				DRM_ERROR("Error (%ld) waiting for fence!\n", r);
> +	spin_lock(&ctx->ring_lock);
> +	idx = centity->sequence & (amdgpu_sched_jobs - 1);
> +	other = dma_fence_get(centity->fences[idx]);
> +	spin_unlock(&ctx->ring_lock);
>   
> -			return r;
> -		}
> -	}
> +	if (!other)
> +		return 0;
>   
> -	return 0;
> +	r = dma_fence_wait(other, true);
> +	if (r < 0 && r != -ERESTARTSYS)
> +		DRM_ERROR("Error (%ld) waiting for fence!\n", r);
> +
> +	dma_fence_put(other);
> +	return r;
>   }
>   
>   void amdgpu_ctx_mgr_init(struct amdgpu_ctx_mgr *mgr)
_______________________________________________
amd-gfx mailing list
amd-gfx@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/amd-gfx




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux