Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Herbert Xu and committed by
David S. Miller
80595d59 81705ad1

+9 -1
+9 -1
net/core/dev.c
··· 2533 2533 struct net_device *dev = napi->dev; 2534 2534 struct sk_buff *skb = napi->skb; 2535 2535 struct ethhdr *eth; 2536 + skb_frag_t *frag; 2537 + int i; 2536 2538 2537 2539 napi->skb = NULL; 2538 2540 ··· 2547 2545 } 2548 2546 2549 2547 BUG_ON(info->nr_frags > MAX_SKB_FRAGS); 2548 + frag = &info->frags[info->nr_frags - 1]; 2549 + 2550 + for (i = skb_shinfo(skb)->nr_frags; i < info->nr_frags; i++) { 2551 + skb_fill_page_desc(skb, i, frag->page, frag->page_offset, 2552 + frag->size); 2553 + frag++; 2554 + } 2550 2555 skb_shinfo(skb)->nr_frags = info->nr_frags; 2551 - memcpy(skb_shinfo(skb)->frags, info->frags, sizeof(info->frags)); 2552 2556 2553 2557 skb->data_len = info->len; 2554 2558 skb->len += info->len;