[PATCH 2/5] drm/ttm: add busy and idle placement flags

Daniel Vetter daniel at ffwll.ch
Tue Aug 31 13:18:44 UTC 2021


On Tue, Aug 31, 2021 at 01:21:07PM +0200, Christian König wrote:
> More flexible than the busy placements.
> 
> Signed-off-by: Christian König <christian.koenig at amd.com>
> ---
>  drivers/gpu/drm/ttm/ttm_bo.c    | 8 +++++++-
>  include/drm/ttm/ttm_placement.h | 6 ++++++
>  2 files changed, 13 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
> index 0a3127436f61..c7034040c67f 100644
> --- a/drivers/gpu/drm/ttm/ttm_bo.c
> +++ b/drivers/gpu/drm/ttm/ttm_bo.c
> @@ -834,6 +834,9 @@ int ttm_bo_mem_space(struct ttm_buffer_object *bo,
>  		const struct ttm_place *place = &placement->placement[i];
>  		struct ttm_resource_manager *man;
>  
> +		if (place->flags & TTM_PL_FLAG_BUSY)
> +			continue;
> +
>  		man = ttm_manager_type(bdev, place->mem_type);
>  		if (!man || !ttm_resource_manager_used(man))
>  			continue;
> @@ -860,6 +863,9 @@ int ttm_bo_mem_space(struct ttm_buffer_object *bo,
>  		const struct ttm_place *place = &placement->busy_placement[i];
>  		struct ttm_resource_manager *man;
>  
> +		if (place->flags & TTM_PL_FLAG_IDLE)
> +			continue;
> +
>  		man = ttm_manager_type(bdev, place->mem_type);
>  		if (!man || !ttm_resource_manager_used(man))
>  			continue;
> @@ -869,7 +875,7 @@ int ttm_bo_mem_space(struct ttm_buffer_object *bo,
>  		if (likely(!ret))
>  			return 0;
>  
> -		if (ret && ret != -EBUSY)
> +		if (ret != -EBUSY)
>  			goto error;
>  	}
>  
> diff --git a/include/drm/ttm/ttm_placement.h b/include/drm/ttm/ttm_placement.h
> index 8995c9e4ec1b..63f7217354c0 100644
> --- a/include/drm/ttm/ttm_placement.h
> +++ b/include/drm/ttm/ttm_placement.h
> @@ -53,6 +53,12 @@
>  /* For multihop handling */
>  #define TTM_PL_FLAG_TEMPORARY   (1 << 2)
>  
> +/* Placement is only used when we are evicting */
> +#define TTM_PL_FLAG_BUSY	(1 << 3)
> +
> +/* Placement is only used when we are not evicting */
> +#define TTM_PL_FLAG_IDLE	(1 << 4)

Using an enum for this (with BIT() macro or so) and then slapping
kerneldoc on top would be nice. That way you can also use the same enum in
parameters and structures and it's all a bit easier to find and connect.

Otherwise I think this series makes sense, but probably better for nouveau
folks to do review/testing.
-Daniel

> +
>  /**
>   * struct ttm_place
>   *
> -- 
> 2.25.1
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch


More information about the dri-devel mailing list