>-----Original Message----- >From: dri-devel <dri-devel-bounces@xxxxxxxxxxxxxxxxxxxxx> On Behalf Of >Andy Shevchenko >Sent: Monday, November 14, 2022 11:22 AM >To: Jakob Koschel <jakobkoschel@xxxxxxxxx>; Andy Shevchenko ><andriy.shevchenko@xxxxxxxxxxxxxxx>; Greg Kroah-Hartman ><gregkh@xxxxxxxxxxxxxxxxxxx>; Mathias Nyman ><mathias.nyman@xxxxxxxxxxxxxxx>; intel-gfx@xxxxxxxxxxxxxxxxxxxxx; dri- >devel@xxxxxxxxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; linux- >usb@xxxxxxxxxxxxxxx >Cc: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxxxxxxxx>; Kevin Cernekee ><cernekee@xxxxxxxxx>; Nyman, Mathias <mathias.nyman@xxxxxxxxx>; Vivi, >Rodrigo <rodrigo.vivi@xxxxxxxxx>; Andrew Morton <akpm@linux- >foundation.org> >Subject: [PATCH v2 1/4] i915: Move list_count() to list.h for broader use > >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. > >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; \ >+}) So all of the non-list_for_each code appears to be an inline. This which, resembles the non-list_for_each pattern is a macro? Just curious as to why the macro rather than inline? Mike + > /** > * list_entry_is_head - test if the entry points to the head of the list > * @pos: the type * to cursor >-- >2.35.1