aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/netdevice.h
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2009-02-08 13:00:37 -0500
committerDavid S. Miller <davem@davemloft.net>2009-02-08 23:22:18 -0500
commitaa4b9f533ed5a22952e038b9fac2447ccc682124 (patch)
tree91722b13a63dcd0e49695388e633cfa91b856b80 /include/linux/netdevice.h
parent4ae5544f9a33e4ae306e337f96951eb3ff2df6d9 (diff)
gro: Optimise Ethernet header comparison
This patch optimises the Ethernet header comparison to use 2-byte and 4-byte xors instead of memcmp. In order to facilitate this, the actual comparison is now carried out by the callers of the shared dev_gro_receive function. This has a significant impact when receiving 1500B packets through 10GbE. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux/netdevice.h')
-rw-r--r--include/linux/netdevice.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 9ee344bc6c13..355662aac940 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -1117,6 +1117,13 @@ static inline void skb_gro_reset_offset(struct sk_buff *skb)
1117 NAPI_GRO_CB(skb)->data_offset = 0; 1117 NAPI_GRO_CB(skb)->data_offset = 0;
1118} 1118}
1119 1119
1120static inline void *skb_gro_mac_header(struct sk_buff *skb)
1121{
1122 return skb_mac_header(skb) < skb->data ? skb_mac_header(skb) :
1123 page_address(skb_shinfo(skb)->frags[0].page) +
1124 skb_shinfo(skb)->frags[0].page_offset;
1125}
1126
1120static inline int dev_hard_header(struct sk_buff *skb, struct net_device *dev, 1127static inline int dev_hard_header(struct sk_buff *skb, struct net_device *dev,
1121 unsigned short type, 1128 unsigned short type,
1122 const void *daddr, const void *saddr, 1129 const void *daddr, const void *saddr,