[PATCH 1/5] drm/ttm: cleanup ttm_resource_compat
Huang Rui
ray.huang at amd.com
Thu Sep 2 08:45:31 UTC 2021
On Tue, Aug 31, 2021 at 07:21:06PM +0800, Christian König wrote:
> Move that function into the resource handling and remove an unused parameter.
>
> Signed-off-by: Christian König <christian.koenig at amd.com>
Looks this patch is separate from others in this series.
new_flags won't be used anymore.
Reviewed-by: Huang Rui <ray.huang at amd.com>
> ---
> drivers/gpu/drm/ttm/ttm_bo.c | 48 +----------------------------
> drivers/gpu/drm/ttm/ttm_resource.c | 49 ++++++++++++++++++++++++++++++
> drivers/gpu/drm/vmwgfx/vmwgfx_bo.c | 15 ++++-----
> include/drm/ttm/ttm_bo_api.h | 12 --------
> include/drm/ttm/ttm_resource.h | 3 ++
> 5 files changed, 59 insertions(+), 68 deletions(-)
>
> diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
> index 3573f9e393be..0a3127436f61 100644
> --- a/drivers/gpu/drm/ttm/ttm_bo.c
> +++ b/drivers/gpu/drm/ttm/ttm_bo.c
> @@ -924,57 +924,11 @@ static int ttm_bo_move_buffer(struct ttm_buffer_object *bo,
> return ret;
> }
>
> -static bool ttm_bo_places_compat(const struct ttm_place *places,
> - unsigned num_placement,
> - struct ttm_resource *mem,
> - uint32_t *new_flags)
> -{
> - unsigned i;
> -
> - if (mem->placement & TTM_PL_FLAG_TEMPORARY)
> - return false;
> -
> - for (i = 0; i < num_placement; i++) {
> - const struct ttm_place *heap = &places[i];
> -
> - if ((mem->start < heap->fpfn ||
> - (heap->lpfn != 0 && (mem->start + mem->num_pages) > heap->lpfn)))
> - continue;
> -
> - *new_flags = heap->flags;
> - if ((mem->mem_type == heap->mem_type) &&
> - (!(*new_flags & TTM_PL_FLAG_CONTIGUOUS) ||
> - (mem->placement & TTM_PL_FLAG_CONTIGUOUS)))
> - return true;
> - }
> - return false;
> -}
> -
> -bool ttm_bo_mem_compat(struct ttm_placement *placement,
> - struct ttm_resource *mem,
> - uint32_t *new_flags)
> -{
> - if (ttm_bo_places_compat(placement->placement, placement->num_placement,
> - mem, new_flags))
> - return true;
> -
> - if ((placement->busy_placement != placement->placement ||
> - placement->num_busy_placement > placement->num_placement) &&
> - ttm_bo_places_compat(placement->busy_placement,
> - placement->num_busy_placement,
> - mem, new_flags))
> - return true;
> -
> - return false;
> -}
> -EXPORT_SYMBOL(ttm_bo_mem_compat);
> -
> int ttm_bo_validate(struct ttm_buffer_object *bo,
> struct ttm_placement *placement,
> struct ttm_operation_ctx *ctx)
> {
> int ret;
> - uint32_t new_flags;
>
> dma_resv_assert_held(bo->base.resv);
>
> @@ -987,7 +941,7 @@ int ttm_bo_validate(struct ttm_buffer_object *bo,
> /*
> * Check whether we need to move buffer.
> */
> - if (!ttm_bo_mem_compat(placement, bo->resource, &new_flags)) {
> + if (!ttm_resource_compat(bo->resource, placement)) {
> ret = ttm_bo_move_buffer(bo, placement, ctx);
> if (ret)
> return ret;
> diff --git a/drivers/gpu/drm/ttm/ttm_resource.c b/drivers/gpu/drm/ttm/ttm_resource.c
> index 2431717376e7..035d71332d18 100644
> --- a/drivers/gpu/drm/ttm/ttm_resource.c
> +++ b/drivers/gpu/drm/ttm/ttm_resource.c
> @@ -67,6 +67,55 @@ void ttm_resource_free(struct ttm_buffer_object *bo, struct ttm_resource **res)
> }
> EXPORT_SYMBOL(ttm_resource_free);
>
> +static bool ttm_resource_places_compat(struct ttm_resource *res,
> + const struct ttm_place *places,
> + unsigned num_placement)
> +{
> + unsigned i;
> +
> + if (res->placement & TTM_PL_FLAG_TEMPORARY)
> + return false;
> +
> + for (i = 0; i < num_placement; i++) {
> + const struct ttm_place *heap = &places[i];
> +
> + if (res->start < heap->fpfn || (heap->lpfn &&
> + (res->start + res->num_pages) > heap->lpfn))
> + continue;
> +
> + if ((res->mem_type == heap->mem_type) &&
> + (!(heap->flags & TTM_PL_FLAG_CONTIGUOUS) ||
> + (res->placement & TTM_PL_FLAG_CONTIGUOUS)))
> + return true;
> + }
> + return false;
> +}
> +
> +/**
> + * ttm_resource_compat - check if resource is compatible with placement
> + *
> + * @res: the resource to check
> + * @placement: the placement to check against
> + *
> + * Returns true if the placement is compatible.
> + */
> +bool ttm_resource_compat(struct ttm_resource *res,
> + struct ttm_placement *placement)
> +{
> + if (ttm_resource_places_compat(res, placement->placement,
> + placement->num_placement))
> + return true;
> +
> + if ((placement->busy_placement != placement->placement ||
> + placement->num_busy_placement > placement->num_placement) &&
> + ttm_resource_places_compat(res, placement->busy_placement,
> + placement->num_busy_placement))
> + return true;
> +
> + return false;
> +}
> +EXPORT_SYMBOL(ttm_resource_compat);
> +
> /**
> * ttm_resource_manager_init
> *
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_bo.c b/drivers/gpu/drm/vmwgfx/vmwgfx_bo.c
> index 9e3e1429db94..fd007f1c1776 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_bo.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_bo.c
> @@ -94,7 +94,6 @@ int vmw_bo_pin_in_placement(struct vmw_private *dev_priv,
> struct ttm_operation_ctx ctx = {interruptible, false };
> struct ttm_buffer_object *bo = &buf->base;
> int ret;
> - uint32_t new_flags;
>
> vmw_execbuf_release_pinned_bo(dev_priv);
>
> @@ -103,8 +102,8 @@ int vmw_bo_pin_in_placement(struct vmw_private *dev_priv,
> goto err;
>
> if (buf->base.pin_count > 0)
> - ret = ttm_bo_mem_compat(placement, bo->resource,
> - &new_flags) == true ? 0 : -EINVAL;
> + ret = ttm_resource_compat(bo->resource, placement)
> + ? 0 : -EINVAL;
> else
> ret = ttm_bo_validate(bo, placement, &ctx);
>
> @@ -136,7 +135,6 @@ int vmw_bo_pin_in_vram_or_gmr(struct vmw_private *dev_priv,
> struct ttm_operation_ctx ctx = {interruptible, false };
> struct ttm_buffer_object *bo = &buf->base;
> int ret;
> - uint32_t new_flags;
>
> vmw_execbuf_release_pinned_bo(dev_priv);
>
> @@ -145,8 +143,8 @@ int vmw_bo_pin_in_vram_or_gmr(struct vmw_private *dev_priv,
> goto err;
>
> if (buf->base.pin_count > 0) {
> - ret = ttm_bo_mem_compat(&vmw_vram_gmr_placement, bo->resource,
> - &new_flags) == true ? 0 : -EINVAL;
> + ret = ttm_resource_compat(bo->resource, &vmw_vram_gmr_placement)
> + ? 0 : -EINVAL;
> goto out_unreserve;
> }
>
> @@ -208,7 +206,6 @@ int vmw_bo_pin_in_start_of_vram(struct vmw_private *dev_priv,
> struct ttm_placement placement;
> struct ttm_place place;
> int ret = 0;
> - uint32_t new_flags;
>
> place = vmw_vram_placement.placement[0];
> place.lpfn = bo->resource->num_pages;
> @@ -236,8 +233,8 @@ int vmw_bo_pin_in_start_of_vram(struct vmw_private *dev_priv,
> }
>
> if (buf->base.pin_count > 0)
> - ret = ttm_bo_mem_compat(&placement, bo->resource,
> - &new_flags) == true ? 0 : -EINVAL;
> + ret = ttm_resource_compat(bo->resource, &placement)
> + ? 0 : -EINVAL;
> else
> ret = ttm_bo_validate(bo, &placement, &ctx);
>
> diff --git a/include/drm/ttm/ttm_bo_api.h b/include/drm/ttm/ttm_bo_api.h
> index f681bbdbc698..76d7c33884da 100644
> --- a/include/drm/ttm/ttm_bo_api.h
> +++ b/include/drm/ttm/ttm_bo_api.h
> @@ -264,18 +264,6 @@ static inline int ttm_bo_wait_ctx(struct ttm_buffer_object *bo, struct ttm_opera
> return ttm_bo_wait(bo, ctx->interruptible, ctx->no_wait_gpu);
> }
>
> -/**
> - * ttm_bo_mem_compat - Check if proposed placement is compatible with a bo
> - *
> - * @placement: Return immediately if buffer is busy.
> - * @mem: The struct ttm_resource indicating the region where the bo resides
> - * @new_flags: Describes compatible placement found
> - *
> - * Returns true if the placement is compatible
> - */
> -bool ttm_bo_mem_compat(struct ttm_placement *placement, struct ttm_resource *mem,
> - uint32_t *new_flags);
> -
> /**
> * ttm_bo_validate
> *
> diff --git a/include/drm/ttm/ttm_resource.h b/include/drm/ttm/ttm_resource.h
> index 140b6b9a8bbe..32c5edd9e8b5 100644
> --- a/include/drm/ttm/ttm_resource.h
> +++ b/include/drm/ttm/ttm_resource.h
> @@ -40,6 +40,7 @@ struct ttm_resource_manager;
> struct ttm_resource;
> struct ttm_place;
> struct ttm_buffer_object;
> +struct ttm_placement;
> struct dma_buf_map;
> struct io_mapping;
> struct sg_table;
> @@ -266,6 +267,8 @@ int ttm_resource_alloc(struct ttm_buffer_object *bo,
> const struct ttm_place *place,
> struct ttm_resource **res);
> void ttm_resource_free(struct ttm_buffer_object *bo, struct ttm_resource **res);
> +bool ttm_resource_compat(struct ttm_resource *res,
> + struct ttm_placement *placement);
>
> void ttm_resource_manager_init(struct ttm_resource_manager *man,
> unsigned long p_size);
> --
> 2.25.1
>
More information about the dri-devel
mailing list