[PATCH] drm/amdkfd: Don't trigger evictions unmapping dmabuf attachments

Eric Huang jinhuieric.huang at amd.com
Mon May 1 22:09:15 UTC 2023


Reviewed-by: Eric Huang <jinhuieric.huang at amd.com>

Regards,
Eric

On 2023-05-01 16:52, Felix Kuehling wrote:
> Don't move DMABuf attachments for PCIe P2P mappings to the SYSTEM domain
> when unmapping. This avoids triggering eviction fences unnecessarily.
> Instead do the move to SYSTEM and back to GTT when mapping these
> attachments to ensure the SG table gets updated after evictions.
>
> This may still trigger unnecessary evictions if user mode unmaps and
> remaps the same BO. However, this is unlikely in real applications.
>
> Cc: Eric Huang <jinhuieric.huang at amd.com>
> Signed-off-by: Felix Kuehling <Felix.Kuehling at amd.com>
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 15 ++++++++++-----
>   1 file changed, 10 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> index 1002c7834386..bb8e6f6793c0 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> @@ -530,6 +530,12 @@ kfd_mem_dmamap_dmabuf(struct kfd_mem_attachment *attachment)
>   {
>   	struct ttm_operation_ctx ctx = {.interruptible = true};
>   	struct amdgpu_bo *bo = attachment->bo_va->base.bo;
> +	int ret;
> +
> +	amdgpu_bo_placement_from_domain(bo, AMDGPU_GEM_DOMAIN_CPU);
> +	ret = ttm_bo_validate(&bo->tbo, &bo->placement, &ctx);
> +	if (ret)
> +		return ret;
>   
>   	amdgpu_bo_placement_from_domain(bo, AMDGPU_GEM_DOMAIN_GTT);
>   	return ttm_bo_validate(&bo->tbo, &bo->placement, &ctx);
> @@ -662,11 +668,10 @@ kfd_mem_dmaunmap_userptr(struct kgd_mem *mem,
>   static void
>   kfd_mem_dmaunmap_dmabuf(struct kfd_mem_attachment *attachment)
>   {
> -	struct ttm_operation_ctx ctx = {.interruptible = true};
> -	struct amdgpu_bo *bo = attachment->bo_va->base.bo;
> -
> -	amdgpu_bo_placement_from_domain(bo, AMDGPU_GEM_DOMAIN_CPU);
> -	ttm_bo_validate(&bo->tbo, &bo->placement, &ctx);
> +	/* This is a no-op. We don't want to trigger eviction fences when
> +	 * unmapping DMABufs. Therefore the invalidation (moving to system
> +	 * domain) is done in kfd_mem_dmamap_dmabuf.
> +	 */
>   }
>   
>   /**



More information about the amd-gfx mailing list