aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2009-01-29 09:19:52 -0500
committerDavid S. Miller <davem@davemloft.net>2009-01-29 19:33:04 -0500
commit80595d59ba9917227856e663da249c2276a8628d (patch)
tree4e1a175110c7ea8ee33a59a6d18cc72775332d3e /net
parent81705ad1b2f926d2ef15ed95074a9c1fa9fb4dc4 (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.c10
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;