[PATCH v2 1/4] i915: Move list_count() to list.h for broader use

Jani Nikula jani.nikula at linux.intel.com
Tue Nov 15 15:46:28 UTC 2022


On Mon, 14 Nov 2022, Andy Shevchenko <andriy.shevchenko at linux.intel.com> wrote:
> Some of the existing users, and definitely will be new ones, want to
> count existing nodes in the list. Provide a generic API for that by
> moving code from i915 to list.h.

I think I'd find list_length() a much more natural name for this.

*shrug*

Acked-by: Jani Nikula <jani.nikula at intel.com>

regardless of what you decide to do with name or static inline etc.


>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko at linux.intel.com>
> ---
> v2: dropped the duplicate code in i915 (LKP)
>  drivers/gpu/drm/i915/gt/intel_engine_cs.c | 13 +------------
>  include/linux/list.h                      | 13 +++++++++++++
>  2 files changed, 14 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> index 6ae8b07cfaa1..b5d474be564d 100644
> --- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> +++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> @@ -2085,17 +2085,6 @@ static void print_request_ring(struct drm_printer *m, struct i915_request *rq)
>  	}
>  }
>  
> -static unsigned long list_count(struct list_head *list)
> -{
> -	struct list_head *pos;
> -	unsigned long count = 0;
> -
> -	list_for_each(pos, list)
> -		count++;
> -
> -	return count;
> -}
> -
>  static unsigned long read_ul(void *p, size_t x)
>  {
>  	return *(unsigned long *)(p + x);
> @@ -2270,7 +2259,7 @@ void intel_engine_dump(struct intel_engine_cs *engine,
>  	spin_lock_irqsave(&engine->sched_engine->lock, flags);
>  	engine_dump_active_requests(engine, m);
>  
> -	drm_printf(m, "\tOn hold?: %lu\n",
> +	drm_printf(m, "\tOn hold?: %zu\n",
>  		   list_count(&engine->sched_engine->hold));
>  	spin_unlock_irqrestore(&engine->sched_engine->lock, flags);
>  
> diff --git a/include/linux/list.h b/include/linux/list.h
> index 61762054b4be..098eccf8c1b6 100644
> --- a/include/linux/list.h
> +++ b/include/linux/list.h
> @@ -655,6 +655,19 @@ static inline void list_splice_tail_init(struct list_head *list,
>  	     !list_is_head(pos, (head)); \
>  	     pos = n, n = pos->prev)
>  
> +/**
> + * list_count - count nodes in the list
> + * @head:	the head for your list.
> + */
> +#define list_count(head)		\
> +({					\
> +	struct list_head *__tmp;	\
> +	size_t __i = 0;			\
> +	list_for_each(__tmp, head)	\
> +		__i++;			\
> +	__i;				\
> +})
> +
>  /**
>   * list_entry_is_head - test if the entry points to the head of the list
>   * @pos:	the type * to cursor

-- 
Jani Nikula, Intel Open Source Graphics Center


More information about the dri-devel mailing list