[PATCH v3] drm/amdgpu: Fix VRAM BO swap issue

Christian König ckoenig.leichtzumerken at gmail.com
Mon Sep 26 06:31:48 UTC 2022


Am 26.09.22 um 07:25 schrieb Arunpravin Paneer Selvam:
> DRM buddy manager allocates the contiguous memory requests in
> a single block or multiple blocks. So for the ttm move operation
> (incase of low vram memory) we should consider all the blocks to
> compute the total memory size which compared with the struct
> ttm_resource num_pages in order to verify that the blocks are
> contiguous for the eviction process.
>
> v2: Added a Fixes tag
> v3: Rewrite the code to save a bit of calculations and
>      variables (Christian)
>
> Fixes: c9cad937c0c5 ("drm/amdgpu: add drm buddy support to amdgpu")
> Signed-off-by: Arunpravin Paneer Selvam <Arunpravin.PaneerSelvam at amd.com>

Reviewed-by: Christian König <christian.koenig at amd.com>

> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 17 ++++++++++++-----
>   1 file changed, 12 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> index b1c455329023..dc262d2c2925 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> @@ -424,8 +424,9 @@ static int amdgpu_move_blit(struct ttm_buffer_object *bo,
>   static bool amdgpu_mem_visible(struct amdgpu_device *adev,
>   			       struct ttm_resource *mem)
>   {
> -	uint64_t mem_size = (u64)mem->num_pages << PAGE_SHIFT;
> +	u64 mem_size = (u64)mem->num_pages << PAGE_SHIFT;
>   	struct amdgpu_res_cursor cursor;
> +	u64 end;
>   
>   	if (mem->mem_type == TTM_PL_SYSTEM ||
>   	    mem->mem_type == TTM_PL_TT)
> @@ -434,12 +435,18 @@ static bool amdgpu_mem_visible(struct amdgpu_device *adev,
>   		return false;
>   
>   	amdgpu_res_first(mem, 0, mem_size, &cursor);
> +	end = cursor.start + cursor.size;
> +	while (cursor.remaining) {
> +		amdgpu_res_next(&cursor, cursor.size);
>   
> -	/* ttm_resource_ioremap only supports contiguous memory */
> -	if (cursor.size != mem_size)
> -		return false;
> +		/* ttm_resource_ioremap only supports contiguous memory */
> +		if (end != cursor.start)
> +			return false;
> +
> +		end = cursor.start + cursor.size;
> +	}
>   
> -	return cursor.start + cursor.size <= adev->gmc.visible_vram_size;
> +	return end <= adev->gmc.visible_vram_size;
>   }
>   
>   /*



More information about the amd-gfx mailing list