All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v1] list: Add a macro to test if entry is pointing to the head
@ 2020-09-29 11:28 Andy Shevchenko
  0 siblings, 0 replies; only message in thread
From: Andy Shevchenko @ 2020-09-29 11:28 UTC (permalink / raw)
  To: Cezary Rojewski, linux-kernel, Andrew Morton; +Cc: Andy Shevchenko

Add a macro to test if entry is pointing to the head of the list
which is useful in cases like:

  list_for_each_entry(pos, &head, member) {
    if (cond)
      break;
  }
  if (list_entry_is_head(pos, &head, member))
    return -ERRNO;

that allows to avoid additional variable to be added to track if loop
has not been stopped in the middle.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 include/linux/list.h | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/include/linux/list.h b/include/linux/list.h
index 796975c3c35c..49efaa8c3403 100644
--- a/include/linux/list.h
+++ b/include/linux/list.h
@@ -770,6 +770,17 @@ static inline void list_splice_tail_init(struct list_head *list,
 #define list_safe_reset_next(pos, n, member)				\
 	n = list_next_entry(pos, member)
 
+/**
+ * list_entry_is_head - test if the entry points to the head of the list
+ * @pos:	the type * to cursor
+ * @head:	the head for your list.
+ * @member:	the name of the list_head within the struct.
+ *
+ * This macro can be used to check if the loop over the list wasn't stopped.
+ */
+#define list_entry_is_head(pos, head, member)				\
+	(&pos->member == (head))
+
 /*
  * Double linked lists with a single pointer list head.
  * Mostly useful for hash tables where the two pointer list head is
-- 
2.28.0


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2020-09-29 11:31 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-29 11:28 [PATCH v1] list: Add a macro to test if entry is pointing to the head Andy Shevchenko

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.