| title: | Re PATCH list h add list for each struct |
|
On Mon, 2010-01-18 at 17:23 +0100, Jiri Pirko wrote:
When preparing to upcoming migration of mc_list (list of multicast MACs)
to list_head, the need of traversing the list over one structure member
appeared. I thought Ill do it locally but I decided that an intruduction
the macro in list.h would be much clearer. Please kindly for a review.
Jirka
Signed-off-by: Jiri Pirko <jpirko@xxxxxxxxxx
diff --git a/include/linux/list.h b/include/linux/list.h
index 969f6e9..8350a94 100644
--- a/include/linux/list.h
+++ b/include/linux/list.h
@@ -420,6 +420,22 @@ static inline void list_splice_tail_init(struct list_head *list,
pos = list_entry(pos- member.prev, typeof(*pos), member))
/**
+ * list_for_each_struct_entry - iterate over list of given type using
+ * the struct member.
+ * @pos: the type * to use as a loop cursor.
+ * @head: the head for your list.
+ * @type: the type of the struct.
+ * @posmember: the name ot the loop cursor within the struct.
+ * @member: the name of the list_struct within the struct.
+ */
+#define list_for_each_struct_entry(pos, head, type, posmember, member)
+ for (pos = list_entry((head)- next, type, member)- posmember;
Surely &list_entry(...)- posmember ?
+ prefetch(container_of(pos, type, posmember)- member.next),
+ &container_of(pos, type, posmember)- member != (head);
It seems a bit dodgy to do this pointer arithmetic on a list node which
might be the list head.
+ pos = list_entry(container_of(pos, type, posmember)- member.next,
+ type, member)- posmember)
My version:
#define list_for_each_struct_entry(pos, head, type, posmember, member)
for (pos = list_empty(head) ? NULL :
&list_first_entry(head, type, member)- posmember;
prefetch(container_of(pos, type, posmember)- member.next), pos;
pos = list_is_last(&container_of(pos, type, posmember)- member,
head) ? NULL :
&list_entry(container_of(pos, type, posmember)- member.next,
type, member)- posmember)
Ben.
--
Ben Hutchings, Senior Software Engineer, Solarflare Communications
Not speaking for my employer; thats the marketing departments job.
They asked us to note that Solarflare product names are trademarked.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at rel="nofollow" vger.kernel.org/majordomo-info.html vger.kernel.org/majordomo-info.html
|