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>
This commit is contained in:
parent
81705ad1b2
commit
80595d59ba
@ -2533,6 +2533,8 @@ struct sk_buff *napi_fraginfo_skb(struct napi_struct *napi,
|
|||||||
struct net_device *dev = napi->dev;
|
struct net_device *dev = napi->dev;
|
||||||
struct sk_buff *skb = napi->skb;
|
struct sk_buff *skb = napi->skb;
|
||||||
struct ethhdr *eth;
|
struct ethhdr *eth;
|
||||||
|
skb_frag_t *frag;
|
||||||
|
int i;
|
||||||
|
|
||||||
napi->skb = NULL;
|
napi->skb = NULL;
|
||||||
|
|
||||||
@ -2545,8 +2547,14 @@ struct sk_buff *napi_fraginfo_skb(struct napi_struct *napi,
|
|||||||
}
|
}
|
||||||
|
|
||||||
BUG_ON(info->nr_frags > MAX_SKB_FRAGS);
|
BUG_ON(info->nr_frags > MAX_SKB_FRAGS);
|
||||||
|
frag = &info->frags[info->nr_frags - 1];
|
||||||
|
|
||||||
|
for (i = skb_shinfo(skb)->nr_frags; i < info->nr_frags; i++) {
|
||||||
|
skb_fill_page_desc(skb, i, frag->page, frag->page_offset,
|
||||||
|
frag->size);
|
||||||
|
frag++;
|
||||||
|
}
|
||||||
skb_shinfo(skb)->nr_frags = info->nr_frags;
|
skb_shinfo(skb)->nr_frags = info->nr_frags;
|
||||||
memcpy(skb_shinfo(skb)->frags, info->frags, sizeof(info->frags));
|
|
||||||
|
|
||||||
skb->data_len = info->len;
|
skb->data_len = info->len;
|
||||||
skb->len += info->len;
|
skb->len += info->len;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user