diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2009-01-29 09:19:52 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-01-29 19:33:04 -0500 |
commit | 80595d59ba9917227856e663da249c2276a8628d (patch) | |
tree | 4e1a175110c7ea8ee33a59a6d18cc72775332d3e /net | |
parent | 81705ad1b2f926d2ef15ed95074a9c1fa9fb4dc4 (diff) |
gro: Open-code memcpy in napi_fraginfo_skb
This patch optimises napi_fraginfo_skb to only copy the bits
necessary. We also open-code the memcpy so that the alignment
information is always available to gcc.
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/core/dev.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index df406dcf7482..ec5be1c7f2f1 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -2533,6 +2533,8 @@ struct sk_buff *napi_fraginfo_skb(struct napi_struct *napi, | |||
2533 | struct net_device *dev = napi->dev; | 2533 | struct net_device *dev = napi->dev; |
2534 | struct sk_buff *skb = napi->skb; | 2534 | struct sk_buff *skb = napi->skb; |
2535 | struct ethhdr *eth; | 2535 | struct ethhdr *eth; |
2536 | skb_frag_t *frag; | ||
2537 | int i; | ||
2536 | 2538 | ||
2537 | napi->skb = NULL; | 2539 | napi->skb = NULL; |
2538 | 2540 | ||
@@ -2545,8 +2547,14 @@ struct sk_buff *napi_fraginfo_skb(struct napi_struct *napi, | |||
2545 | } | 2547 | } |
2546 | 2548 | ||
2547 | BUG_ON(info->nr_frags > MAX_SKB_FRAGS); | 2549 | BUG_ON(info->nr_frags > MAX_SKB_FRAGS); |
2550 | frag = &info->frags[info->nr_frags - 1]; | ||
2551 | |||
2552 | for (i = skb_shinfo(skb)->nr_frags; i < info->nr_frags; i++) { | ||
2553 | skb_fill_page_desc(skb, i, frag->page, frag->page_offset, | ||
2554 | frag->size); | ||
2555 | frag++; | ||
2556 | } | ||
2548 | skb_shinfo(skb)->nr_frags = info->nr_frags; | 2557 | skb_shinfo(skb)->nr_frags = info->nr_frags; |
2549 | memcpy(skb_shinfo(skb)->frags, info->frags, sizeof(info->frags)); | ||
2550 | 2558 | ||
2551 | skb->data_len = info->len; | 2559 | skb->data_len = info->len; |
2552 | skb->len += info->len; | 2560 | skb->len += info->len; |