SEARCH  

NEWS

2010.10.06:11:36:28
Ustawowe wsparcie rozwoju sieci telekomunikacyjnych
Ustawa o wspieraniu rozwoju usług i sieci telekomunikacyjnych, która weszła w życie 15 lipca br., wprowadza szereg nowatorskich rozwiązań, mających na celu przyspieszenie rozwoju i upowszechnienie usług telekomunikacyjnych w Polsce. Doprowadzi do obniżenia kosztów przedsiębiorców telekomunikacyjnych i odbiorców tych usług (tzw. użytkowników końcowych).

 

messageID:538460007422
author:Jiri Pirko
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
Index