[PATCH 1/1] drm/amdgpu: Free user pages if amdgpu_cs_parser_bos failed

Christian König ckoenig.leichtzumerken at gmail.com
Thu Apr 28 05:58:02 UTC 2022


Am 28.04.22 um 01:07 schrieb Philip Yang:
> Otherwise userspace resubmit the BOs again will trigger kernel WARNING
> and fail the command submission.
>
> Signed-off-by: Philip Yang <Philip.Yang at amd.com>

Thanks for looking into this Philip. Patch is Reviewed-by: Christian 
König <christian.koenig at amd.com>

> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 18 +++++++++++++++---
>   1 file changed, 15 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> index ea28942b0ede..44dcbef80229 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> @@ -550,7 +550,7 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p,
>   		if (r) {
>   			kvfree(e->user_pages);
>   			e->user_pages = NULL;
> -			return r;
> +			goto out_free_user_pages;
>   		}
>   
>   		for (i = 0; i < bo->tbo.ttm->num_pages; i++) {
> @@ -567,7 +567,7 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p,
>   	if (unlikely(r != 0)) {
>   		if (r != -ERESTARTSYS)
>   			DRM_ERROR("ttm_eu_reserve_buffers failed.\n");
> -		goto out;
> +		goto out_free_user_pages;
>   	}
>   
>   	amdgpu_bo_list_for_each_entry(e, p->bo_list) {
> @@ -649,7 +649,19 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p,
>   		}
>   		ttm_eu_backoff_reservation(&p->ticket, &p->validated);
>   	}
> -out:
> +
> +out_free_user_pages:
> +	if (r) {
> +		amdgpu_bo_list_for_each_userptr_entry(e, p->bo_list) {
> +			struct amdgpu_bo *bo = ttm_to_amdgpu_bo(e->tv.bo);
> +
> +			if (!e->user_pages)
> +				continue;
> +			amdgpu_ttm_tt_get_user_pages_done(bo->tbo.ttm);
> +			kvfree(e->user_pages);
> +			e->user_pages = NULL;
> +		}
> +	}
>   	return r;
>   }
>   



More information about the amd-gfx mailing list