[PATCH] drm/amdgpu: set preferred_domain independent of fallback handling

Christian König ckoenig.leichtzumerken at gmail.com
Tue Apr 17 10:23:38 UTC 2018


Am 17.04.2018 um 10:04 schrieb Chunming Zhou:
> When GEM needs to fallback to GTT for VRAM BOs we still want the
> preferred domain to be untouched so that the BO has a cance to move back
> to VRAM in the future.
>
> Change-Id: I8cfdf3f30532f7e5d80b8e4266b7800211de2f0b
> Signed-off-by: Chunming Zhou <david1.zhou at amd.com>
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c    |  1 +
>   drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 15 +++++++++------
>   drivers/gpu/drm/amd/amdgpu/amdgpu_object.h |  1 +
>   3 files changed, 11 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> index 1200c5ba37da..ff606ce88837 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> @@ -62,6 +62,7 @@ int amdgpu_gem_object_create(struct amdgpu_device *adev, unsigned long size,
>   	bp.byte_align = alignment;
>   	bp.type = type;
>   	bp.resv = resv;
> +	bp.preferred_domain = initial_domain;
>   retry:
>   	bp.flags = flags;
>   	bp.domain = initial_domain;
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> index cac65e32a0b9..9258f0694922 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> @@ -360,6 +360,7 @@ static int amdgpu_bo_do_create(struct amdgpu_device *adev,
>   	};
>   	struct amdgpu_bo *bo;
>   	unsigned long page_align, size = bp->size;
> +	u32 preferred_domains;
>   	size_t acc_size;
>   	int r;
>   
> @@ -380,12 +381,14 @@ static int amdgpu_bo_do_create(struct amdgpu_device *adev,
>   	drm_gem_private_object_init(adev->ddev, &bo->gem_base, size);
>   	INIT_LIST_HEAD(&bo->shadow_list);
>   	INIT_LIST_HEAD(&bo->va);
> -	bo->preferred_domains = bp->domain & (AMDGPU_GEM_DOMAIN_VRAM |
> -					      AMDGPU_GEM_DOMAIN_GTT |
> -					      AMDGPU_GEM_DOMAIN_CPU |
> -					      AMDGPU_GEM_DOMAIN_GDS |
> -					      AMDGPU_GEM_DOMAIN_GWS |
> -					      AMDGPU_GEM_DOMAIN_OA);
> +	preferred_domains = bp->preferred_domain ? bp->preferred_domain :
> +		bp->domain;
> +	bo->preferred_domains = preferred_domains & (AMDGPU_GEM_DOMAIN_VRAM |
> +						     AMDGPU_GEM_DOMAIN_GTT |
> +						     AMDGPU_GEM_DOMAIN_CPU |
> +						     AMDGPU_GEM_DOMAIN_GDS |
> +						     AMDGPU_GEM_DOMAIN_GWS |
> +						     AMDGPU_GEM_DOMAIN_OA);

While at it please drop this masking. We should either return an error 
when unsupported flags are set or just take the value as it is.

Masking it without further processing actually sounds dangerous to me.

With that fixed the patch is Reviewed-by: Christian König 
<christian.koenig at amd.com>.

Regards,
Christian.

>   	bo->allowed_domains = bo->preferred_domains;
>   	if (bp->type != ttm_bo_type_kernel &&
>   	    bo->allowed_domains == AMDGPU_GEM_DOMAIN_VRAM)
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
> index e9a21d991e77..540e03fa159f 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
> @@ -37,6 +37,7 @@ struct amdgpu_bo_param {
>   	unsigned long			size;
>   	int				byte_align;
>   	u32				domain;
> +	u32				preferred_domain;
>   	u64				flags;
>   	enum ttm_bo_type		type;
>   	struct reservation_object	*resv;



More information about the amd-gfx mailing list