On Mon, 14 Nov 2022, Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> 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@xxxxxxxxx> regardless of what you decide to do with name or static inline etc. > > Signed-off-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> > --- > 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