On 6/13/25 17:18, Thomas Hellström wrote:
> Instead of the struct ttm_operation_ctx, Pass a struct ttm_lru_walk_arg
> to enable us to easily extend the walk functionality, and to
> implement ttm_lru_walk_for_evict() using the guarded LRU iteration.
> 
> Signed-off-by: Thomas Hellström <thomas.hellst...@linux.intel.com>

Reviewed-by: Christian König <christian.koe...@amd.com>

> ---
>  drivers/gpu/drm/ttm/ttm_bo_util.c | 10 +++++-----
>  drivers/gpu/drm/xe/xe_shrinker.c  |  3 ++-
>  include/drm/ttm/ttm_bo.h          | 16 ++++++++--------
>  3 files changed, 15 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c 
> b/drivers/gpu/drm/ttm/ttm_bo_util.c
> index 600145cdeb9c..62b76abac578 100644
> --- a/drivers/gpu/drm/ttm/ttm_bo_util.c
> +++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
> @@ -956,11 +956,11 @@ EXPORT_SYMBOL(ttm_bo_lru_cursor_fini);
>   * ttm_bo_lru_cursor_init() - Initialize a struct ttm_bo_lru_cursor
>   * @curs: The ttm_bo_lru_cursor to initialize.
>   * @man: The ttm resource_manager whose LRU lists to iterate over.
> - * @ctx: The ttm_operation_ctx to govern the locking.
> + * @arg: The ttm_lru_walk_arg to govern the walk.
>   *
>   * Initialize a struct ttm_bo_lru_cursor. Currently only trylocking
>   * or prelocked buffer objects are available as detailed by
> - * @ctx::resv and @ctx::allow_res_evict. Ticketlocking is not
> + * @arg->ctx.resv and @arg->ctx.allow_res_evict. Ticketlocking is not
>   * supported.
>   *
>   * Return: Pointer to @curs. The function does not fail.
> @@ -968,11 +968,11 @@ EXPORT_SYMBOL(ttm_bo_lru_cursor_fini);
>  struct ttm_bo_lru_cursor *
>  ttm_bo_lru_cursor_init(struct ttm_bo_lru_cursor *curs,
>                      struct ttm_resource_manager *man,
> -                    struct ttm_operation_ctx *ctx)
> +                    struct ttm_lru_walk_arg *arg)
>  {
>       memset(curs, 0, sizeof(*curs));
>       ttm_resource_cursor_init(&curs->res_curs, man);
> -     curs->arg.ctx = ctx;
> +     curs->arg = arg;
>  
>       return curs;
>  }
> @@ -983,7 +983,7 @@ ttm_bo_from_res_reserved(struct ttm_resource *res, struct 
> ttm_bo_lru_cursor *cur
>  {
>       struct ttm_buffer_object *bo = res->bo;
>  
> -     if (!ttm_lru_walk_trylock(&curs->arg, bo, &curs->needs_unlock))
> +     if (!ttm_lru_walk_trylock(curs->arg, bo, &curs->needs_unlock))
>               return NULL;
>  
>       if (!ttm_bo_get_unless_zero(bo)) {
> diff --git a/drivers/gpu/drm/xe/xe_shrinker.c 
> b/drivers/gpu/drm/xe/xe_shrinker.c
> index 125c836e0ee4..f8a1129da2c3 100644
> --- a/drivers/gpu/drm/xe/xe_shrinker.c
> +++ b/drivers/gpu/drm/xe/xe_shrinker.c
> @@ -66,11 +66,12 @@ static s64 xe_shrinker_walk(struct xe_device *xe,
>               struct ttm_resource_manager *man = ttm_manager_type(&xe->ttm, 
> mem_type);
>               struct ttm_bo_lru_cursor curs;
>               struct ttm_buffer_object *ttm_bo;
> +             struct ttm_lru_walk_arg arg = {.ctx = ctx};
>  
>               if (!man || !man->use_tt)
>                       continue;
>  
> -             ttm_bo_lru_for_each_reserved_guarded(&curs, man, ctx, ttm_bo) {
> +             ttm_bo_lru_for_each_reserved_guarded(&curs, man, &arg, ttm_bo) {
>                       if (!ttm_bo_shrink_suitable(ttm_bo, ctx))
>                               continue;
>  
> diff --git a/include/drm/ttm/ttm_bo.h b/include/drm/ttm/ttm_bo.h
> index 4e52283e5db1..8f04fa48b332 100644
> --- a/include/drm/ttm/ttm_bo.h
> +++ b/include/drm/ttm/ttm_bo.h
> @@ -484,8 +484,8 @@ struct ttm_bo_lru_cursor {
>        * unlock before the next iteration or after loop exit.
>        */
>       bool needs_unlock;
> -     /** @arg: Common BO LRU walk arguments. */
> -     struct ttm_lru_walk_arg arg;
> +     /** @arg: Pointer to common BO LRU walk arguments. */
> +     struct ttm_lru_walk_arg *arg;
>  };
>  
>  void ttm_bo_lru_cursor_fini(struct ttm_bo_lru_cursor *curs);
> @@ -493,7 +493,7 @@ void ttm_bo_lru_cursor_fini(struct ttm_bo_lru_cursor 
> *curs);
>  struct ttm_bo_lru_cursor *
>  ttm_bo_lru_cursor_init(struct ttm_bo_lru_cursor *curs,
>                      struct ttm_resource_manager *man,
> -                    struct ttm_operation_ctx *ctx);
> +                    struct ttm_lru_walk_arg *arg);
>  
>  struct ttm_buffer_object *ttm_bo_lru_cursor_first(struct ttm_bo_lru_cursor 
> *curs);
>  
> @@ -504,9 +504,9 @@ struct ttm_buffer_object *ttm_bo_lru_cursor_next(struct 
> ttm_bo_lru_cursor *curs)
>   */
>  DEFINE_CLASS(ttm_bo_lru_cursor, struct ttm_bo_lru_cursor *,
>            if (_T) {ttm_bo_lru_cursor_fini(_T); },
> -          ttm_bo_lru_cursor_init(curs, man, ctx),
> +          ttm_bo_lru_cursor_init(curs, man, arg),
>            struct ttm_bo_lru_cursor *curs, struct ttm_resource_manager *man,
> -          struct ttm_operation_ctx *ctx);
> +          struct ttm_lru_walk_arg *arg);
>  static inline void *
>  class_ttm_bo_lru_cursor_lock_ptr(class_ttm_bo_lru_cursor_t *_T)
>  { return *_T; }
> @@ -517,7 +517,7 @@ 
> class_ttm_bo_lru_cursor_lock_ptr(class_ttm_bo_lru_cursor_t *_T)
>   * resources on LRU lists.
>   * @_cursor: struct ttm_bo_lru_cursor to use for the iteration.
>   * @_man: The resource manager whose LRU lists to iterate over.
> - * @_ctx: The struct ttm_operation_context to govern the @_bo locking.
> + * @_arg: The struct ttm_lru_walk_arg to govern the LRU walk.
>   * @_bo: The struct ttm_buffer_object pointer pointing to the buffer object
>   * for the current iteration.
>   *
> @@ -530,8 +530,8 @@ 
> class_ttm_bo_lru_cursor_lock_ptr(class_ttm_bo_lru_cursor_t *_T)
>   * example a return or break statement. Exiting the loop will also unlock
>   * (if needed) and unreference @_bo.
>   */
> -#define ttm_bo_lru_for_each_reserved_guarded(_cursor, _man, _ctx, _bo)       
> \
> -     scoped_guard(ttm_bo_lru_cursor, _cursor, _man, _ctx)            \
> +#define ttm_bo_lru_for_each_reserved_guarded(_cursor, _man, _arg, _bo)       
> \
> +     scoped_guard(ttm_bo_lru_cursor, _cursor, _man, _arg)            \
>               for ((_bo) = ttm_bo_lru_cursor_first(_cursor); (_bo);   \
>                    (_bo) = ttm_bo_lru_cursor_next(_cursor))
>  

Reply via email to