diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2009-02-08 13:00:37 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-02-08 23:22:18 -0500 |
commit | aa4b9f533ed5a22952e038b9fac2447ccc682124 (patch) | |
tree | 91722b13a63dcd0e49695388e633cfa91b856b80 /include/linux/netdevice.h | |
parent | 4ae5544f9a33e4ae306e337f96951eb3ff2df6d9 (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.h | 7 |
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 | ||
1120 | static 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 | |||
1120 | static inline int dev_hard_header(struct sk_buff *skb, struct net_device *dev, | 1127 | static 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, |