gro: New frags interface to avoid copying shinfo
It turns out that copying a 16-byte area at ~800k times a second can be really expensive :) This patch redesigns the frags GRO interface to avoid copying that area twice. The two disciples of the frags interface have been converted. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
861ab44059
commit
76620aafd6
@ -1047,14 +1047,6 @@ struct packet_type {
|
||||
struct list_head list;
|
||||
};
|
||||
|
||||
struct napi_gro_fraginfo {
|
||||
skb_frag_t frags[MAX_SKB_FRAGS];
|
||||
unsigned int nr_frags;
|
||||
unsigned int ip_summed;
|
||||
unsigned int len;
|
||||
__wsum csum;
|
||||
};
|
||||
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/notifier.h>
|
||||
|
||||
@ -1442,12 +1434,18 @@ extern int napi_gro_receive(struct napi_struct *napi,
|
||||
struct sk_buff *skb);
|
||||
extern void napi_reuse_skb(struct napi_struct *napi,
|
||||
struct sk_buff *skb);
|
||||
extern struct sk_buff * napi_fraginfo_skb(struct napi_struct *napi,
|
||||
struct napi_gro_fraginfo *info);
|
||||
extern struct sk_buff * napi_get_frags(struct napi_struct *napi);
|
||||
extern int napi_frags_finish(struct napi_struct *napi,
|
||||
struct sk_buff *skb, int ret);
|
||||
extern int napi_gro_frags(struct napi_struct *napi,
|
||||
struct napi_gro_fraginfo *info);
|
||||
extern struct sk_buff * napi_frags_skb(struct napi_struct *napi);
|
||||
extern int napi_gro_frags(struct napi_struct *napi);
|
||||
|
||||
static inline void napi_free_frags(struct napi_struct *napi)
|
||||
{
|
||||
kfree_skb(napi->skb);
|
||||
napi->skb = NULL;
|
||||
}
|
||||
|
||||
extern void netif_nit_deliver(struct sk_buff *skb);
|
||||
extern int dev_valid_name(const char *name);
|
||||
extern int dev_ioctl(struct net *net, unsigned int cmd, void __user *);
|
||||
|
Reference in New Issue
Block a user