Message ID | 20210831112110.113196-1-christian.koenig@amd.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/5] drm/ttm: cleanup ttm_resource_compat | expand |
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@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@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 >
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);
Move that function into the resource handling and remove an unused parameter. Signed-off-by: Christian König <christian.koenig@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(-)