[PATCH] drm/amdgpu: fix UVD contiguous CS mapping problem

Paneer Selvam, Arunpravin arunpravin.paneerselvam at amd.com
Mon Dec 2 09:42:12 UTC 2024


Hi Christian,

Thank you.
Reviewed-by: Arunpravin Paneer Selvam <Arunpravin.PaneerSelvam at amd.com>

Regards,
Arun.
On 11/29/2024 8:38 PM, Christian König wrote:
> When starting the mpv player, Radeon R9 users are observing
> the below error in dmesg.
>
> [drm:amdgpu_uvd_cs_pass2 [amdgpu]]
> *ERROR* msg/fb buffer ff00f7c000-ff00f7e000 out of 256MB segment!
>
> The patch tries to set the TTM_PL_FLAG_CONTIGUOUS for both user
> flag(AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS) set and not set cases.
>
> v2: Make the TTM_PL_FLAG_CONTIGUOUS mandatory for user BO's.
> v3: revert back to v1, but fix the check instead (chk).
>
> Closes:https://gitlab.freedesktop.org/drm/amd/-/issues/3599
> Closes:https://gitlab.freedesktop.org/drm/amd/-/issues/3501
> Signed-off-by: Arunpravin Paneer Selvam <Arunpravin.PaneerSelvam at amd.com>
> Signed-off-by: Christian König <christian.koenig at amd.com>
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c  | 17 +++++++++++------
>   drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c |  2 ++
>   2 files changed, 13 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> index d891ab779ca7..5df21529b3b1 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> @@ -1801,13 +1801,18 @@ int amdgpu_cs_find_mapping(struct amdgpu_cs_parser *parser,
>   	if (dma_resv_locking_ctx((*bo)->tbo.base.resv) != &parser->exec.ticket)
>   		return -EINVAL;
>   
> +	/* Make sure VRAM is allocated contigiously */
>   	(*bo)->flags |= AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS;
> -	amdgpu_bo_placement_from_domain(*bo, (*bo)->allowed_domains);
> -	for (i = 0; i < (*bo)->placement.num_placement; i++)
> -		(*bo)->placements[i].flags |= TTM_PL_FLAG_CONTIGUOUS;
> -	r = ttm_bo_validate(&(*bo)->tbo, &(*bo)->placement, &ctx);
> -	if (r)
> -		return r;
> +	if ((*bo)->tbo.resource->mem_type == TTM_PL_VRAM &&
> +	    !((*bo)->tbo.resource->placement & TTM_PL_FLAG_CONTIGUOUS)) {
> +
> +		amdgpu_bo_placement_from_domain(*bo, (*bo)->allowed_domains);
> +		for (i = 0; i < (*bo)->placement.num_placement; i++)
> +			(*bo)->placements[i].flags |= TTM_PL_FLAG_CONTIGUOUS;
> +		r = ttm_bo_validate(&(*bo)->tbo, &(*bo)->placement, &ctx);
> +		if (r)
> +			return r;
> +	}
>   
>   	return amdgpu_ttm_alloc_gart(&(*bo)->tbo);
>   }
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
> index 31fd30dcd593..65bb26215e86 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
> @@ -551,6 +551,8 @@ static void amdgpu_uvd_force_into_uvd_segment(struct amdgpu_bo *abo)
>   	for (i = 0; i < abo->placement.num_placement; ++i) {
>   		abo->placements[i].fpfn = 0 >> PAGE_SHIFT;
>   		abo->placements[i].lpfn = (256 * 1024 * 1024) >> PAGE_SHIFT;
> +		if (abo->placements[i].mem_type == TTM_PL_VRAM)
> +			abo->placements[i].flags |= TTM_PL_FLAG_CONTIGUOUS;
>   	}
>   }
>   



More information about the amd-gfx mailing list