Message ID | 1335839506.11396.17.camel@edumazet-glaptop |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
From: Eric Dumazet <eric.dumazet@gmail.com> Date: Tue, 01 May 2012 04:31:46 +0200 > From: Eric Dumazet <edumazet@google.com> > > remove useless casts and rename variables for less confusion. > > Signed-off-by: Eric Dumazet <edumazet@google.com> Applied, I really need to get back to completing the list_head conversion :-/ -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Tue, 2012-05-01 at 09:41 -0400, David Miller wrote: > From: Eric Dumazet <eric.dumazet@gmail.com> > Date: Tue, 01 May 2012 04:31:46 +0200 > > > From: Eric Dumazet <edumazet@google.com> > > > > remove useless casts and rename variables for less confusion. > > > > Signed-off-by: Eric Dumazet <edumazet@google.com> > > Applied, I really need to get back to completing the list_head > conversion :-/ Actually doubly linked lists everywhere has a performance issue. When we dequeue one skb, we must bring in cpu cache the next skb as well, to perform the unlink. In some places it would be better to not have a double linked list, and only perform a prefetch(skb->next). -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
From: Eric Dumazet <eric.dumazet@gmail.com> Date: Fri, 04 May 2012 15:01:31 +0200 > On Tue, 2012-05-01 at 09:41 -0400, David Miller wrote: >> From: Eric Dumazet <eric.dumazet@gmail.com> >> Date: Tue, 01 May 2012 04:31:46 +0200 >> >> > From: Eric Dumazet <edumazet@google.com> >> > >> > remove useless casts and rename variables for less confusion. >> > >> > Signed-off-by: Eric Dumazet <edumazet@google.com> >> >> Applied, I really need to get back to completing the list_head >> conversion :-/ > > Actually doubly linked lists everywhere has a performance issue. > > When we dequeue one skb, we must bring in cpu cache the next skb as > well, to perform the unlink. > > In some places it would be better to not have a double linked list, and > only perform a prefetch(skb->next). Indeed, I'll keep this in mind. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 2c75e98..988fc49 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -883,10 +883,11 @@ static inline struct sk_buff *skb_unshare(struct sk_buff *skb, */ static inline struct sk_buff *skb_peek(const struct sk_buff_head *list_) { - struct sk_buff *list = ((const struct sk_buff *)list_)->next; - if (list == (struct sk_buff *)list_) - list = NULL; - return list; + struct sk_buff *skb = list_->next; + + if (skb == (struct sk_buff *)list_) + skb = NULL; + return skb; } /** @@ -902,6 +903,7 @@ static inline struct sk_buff *skb_peek_next(struct sk_buff *skb, const struct sk_buff_head *list_) { struct sk_buff *next = skb->next; + if (next == (struct sk_buff *)list_) next = NULL; return next; @@ -922,10 +924,12 @@ static inline struct sk_buff *skb_peek_next(struct sk_buff *skb, */ static inline struct sk_buff *skb_peek_tail(const struct sk_buff_head *list_) { - struct sk_buff *list = ((const struct sk_buff *)list_)->prev; - if (list == (struct sk_buff *)list_) - list = NULL; - return list; + struct sk_buff *skb = list_->prev; + + if (skb == (struct sk_buff *)list_) + skb = NULL; + return skb; + } /**