All of lore.kernel.org
 help / color / mirror / Atom feed
From: zhoucm1 <zhoucm1-5C7GfCeVMHo@public.gmane.org>
To: "Christian König"
	<ckoenig.leichtzumerken-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org
Subject: Re: [PATCH 2/3] drm/amdgpu: fix and cleanup cpu visible VRAM handling
Date: Tue, 10 Apr 2018 10:38:35 +0800	[thread overview]
Message-ID: <9031c37a-3739-0364-c0db-96a4ef8611cc@amd.com> (raw)
In-Reply-To: <20180409101900.2790-2-christian.koenig-5C7GfCeVMHo@public.gmane.org>



On 2018年04月09日 18:18, Christian König wrote:
> The detection if a BO was placed in CPU visible VRAM was incorrect.
>
> Fix it and merge it with the correct detection in amdgpu_ttm.c
>
> Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Chunming Zhou <david1.zhou@amd.com>

> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c     |  6 ++----
>   drivers/gpu/drm/amd/amdgpu/amdgpu_object.h | 21 +++++++++++++++++++++
>   drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c    | 19 +++----------------
>   3 files changed, 26 insertions(+), 20 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> index de69ab12bb55..68af2f878bc9 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> @@ -382,8 +382,7 @@ static int amdgpu_cs_bo_validate(struct amdgpu_cs_parser *p,
>   
>   	p->bytes_moved += ctx.bytes_moved;
>   	if (adev->gmc.visible_vram_size < adev->gmc.real_vram_size &&
> -	    bo->tbo.mem.mem_type == TTM_PL_VRAM &&
> -	    bo->tbo.mem.start < adev->gmc.visible_vram_size >> PAGE_SHIFT)
> +	    amdgpu_bo_in_cpu_visible_vram(bo))
>   		p->bytes_moved_vis += ctx.bytes_moved;
>   
>   	if (unlikely(r == -ENOMEM) && domain != bo->allowed_domains &&
> @@ -437,8 +436,7 @@ static bool amdgpu_cs_try_evict(struct amdgpu_cs_parser *p,
>   		/* Good we can try to move this BO somewhere else */
>   		update_bytes_moved_vis =
>   			adev->gmc.visible_vram_size < adev->gmc.real_vram_size &&
> -			bo->tbo.mem.mem_type == TTM_PL_VRAM &&
> -			bo->tbo.mem.start < adev->gmc.visible_vram_size >> PAGE_SHIFT;
> +			amdgpu_bo_in_cpu_visible_vram(bo);
>   		amdgpu_ttm_placement_from_domain(bo, other);
>   		r = ttm_bo_validate(&bo->tbo, &bo->placement, &ctx);
>   		p->bytes_moved += ctx.bytes_moved;
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
> index deb10ecd89a1..0e9555526950 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
> @@ -193,6 +193,27 @@ static inline bool amdgpu_bo_gpu_accessible(struct amdgpu_bo *bo)
>   	}
>   }
>   
> +/**
> + * amdgpu_bo_in_cpu_visible_vram - check if BO is (partly) in visible VRAM
> + */
> +static inline bool amdgpu_bo_in_cpu_visible_vram(struct amdgpu_bo *bo)
> +{
> +	struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
> +	unsigned fpfn = adev->gmc.visible_vram_size >> PAGE_SHIFT;
> +	struct drm_mm_node *node = bo->tbo.mem.mm_node;
> +	unsigned long pages_left;
> +
> +	if (bo->tbo.mem.mem_type != TTM_PL_VRAM)
> +		return false;
> +
> +	for (pages_left = bo->tbo.mem.num_pages; pages_left;
> +	     pages_left -= node->size, node++)
> +		if (node->start < fpfn)
> +			return true;
> +
> +	return false;
> +}
> +
>   /**
>    * amdgpu_bo_explicit_sync - return whether the bo is explicitly synced
>    */
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> index d2ab40494a4c..ab829fb3e840 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> @@ -222,20 +222,8 @@ static void amdgpu_evict_flags(struct ttm_buffer_object *bo,
>   		if (!adev->mman.buffer_funcs_enabled) {
>   			amdgpu_ttm_placement_from_domain(abo, AMDGPU_GEM_DOMAIN_CPU);
>   		} else if (adev->gmc.visible_vram_size < adev->gmc.real_vram_size &&
> -			   !(abo->flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED)) {
> -			unsigned fpfn = adev->gmc.visible_vram_size >> PAGE_SHIFT;
> -			struct drm_mm_node *node = bo->mem.mm_node;
> -			unsigned long pages_left;
> -
> -			for (pages_left = bo->mem.num_pages;
> -			     pages_left;
> -			     pages_left -= node->size, node++) {
> -				if (node->start < fpfn)
> -					break;
> -			}
> -
> -			if (!pages_left)
> -				goto gtt;
> +			   !(abo->flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) &&
> +			   amdgpu_bo_in_cpu_visible_vram(abo)) {
>   
>   			/* Try evicting to the CPU inaccessible part of VRAM
>   			 * first, but only set GTT as busy placement, so this
> @@ -244,12 +232,11 @@ static void amdgpu_evict_flags(struct ttm_buffer_object *bo,
>   			 */
>   			amdgpu_ttm_placement_from_domain(abo, AMDGPU_GEM_DOMAIN_VRAM |
>   							 AMDGPU_GEM_DOMAIN_GTT);
> -			abo->placements[0].fpfn = fpfn;
> +			abo->placements[0].fpfn = adev->gmc.visible_vram_size >> PAGE_SHIFT;
>   			abo->placements[0].lpfn = 0;
>   			abo->placement.busy_placement = &abo->placements[1];
>   			abo->placement.num_busy_placement = 1;
>   		} else {
> -gtt:
>   			amdgpu_ttm_placement_from_domain(abo, AMDGPU_GEM_DOMAIN_GTT);
>   		}
>   		break;

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

  parent reply	other threads:[~2018-04-10  2:38 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-09 10:18 [PATCH 1/3] drm/amdgpu: use ctx bytes_moved Christian König
     [not found] ` <20180409101900.2790-1-christian.koenig-5C7GfCeVMHo@public.gmane.org>
2018-04-09 10:18   ` [PATCH 2/3] drm/amdgpu: fix and cleanup cpu visible VRAM handling Christian König
     [not found]     ` <20180409101900.2790-2-christian.koenig-5C7GfCeVMHo@public.gmane.org>
2018-04-09 10:52       ` Michel Dänzer
2018-04-10  2:38       ` zhoucm1 [this message]
2018-04-09 10:19   ` [PATCH 3/3] drm/amdgpu: remove AMDGPU_GEM_CREATE_NO_FALLBACK handling from CS again Christian König
     [not found]     ` <20180409101900.2790-3-christian.koenig-5C7GfCeVMHo@public.gmane.org>
2018-04-10  2:43       ` zhoucm1
     [not found]         ` <11e2b937-9e84-428a-1a90-8752f0dadda4-5C7GfCeVMHo@public.gmane.org>
2018-04-10  9:00           ` Christian König
     [not found]             ` <94eedefc-bd56-652f-39cf-7331bc5892ea-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2018-04-10  9:06               ` zhoucm1
2018-04-10  2:34   ` [PATCH 1/3] drm/amdgpu: use ctx bytes_moved zhoucm1

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=9031c37a-3739-0364-c0db-96a4ef8611cc@amd.com \
    --to=zhoucm1-5c7gfcevmho@public.gmane.org \
    --cc=amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
    --cc=ckoenig.leichtzumerken-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.