diff options
| author | David S. Miller <davem@davemloft.net> | 2011-04-11 13:44:25 -0700 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2011-04-11 13:44:25 -0700 | 
| commit | 1c01a80cfec6f806246f31ff2680cd3639b30e67 (patch) | |
| tree | 0b554aad2ec1da71ecf6339d4ba51617bfe1dc3c /drivers/net/netxen/netxen_nic_main.c | |
| parent | c44d79950b2daa1025e62eede73e4e4a274d1ef3 (diff) | |
| parent | 4a9f65f6304a00f6473e83b19c1e83caa1e42530 (diff) | |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts:
	drivers/net/smsc911x.c
Diffstat (limited to 'drivers/net/netxen/netxen_nic_main.c')
| -rw-r--r-- | drivers/net/netxen/netxen_nic_main.c | 17 | 
1 files changed, 17 insertions, 0 deletions
| diff --git a/drivers/net/netxen/netxen_nic_main.c b/drivers/net/netxen/netxen_nic_main.c index 201b944bd463..b644383017f9 100644 --- a/drivers/net/netxen/netxen_nic_main.c +++ b/drivers/net/netxen/netxen_nic_main.c @@ -1877,6 +1877,8 @@ netxen_nic_xmit_frame(struct sk_buff *skb, struct net_device *netdev)  	struct cmd_desc_type0 *hwdesc, *first_desc;  	struct pci_dev *pdev;  	int i, k; +	int delta = 0; +	struct skb_frag_struct *frag;  	u32 producer;  	int frag_count, no_of_desc; @@ -1884,6 +1886,21 @@ netxen_nic_xmit_frame(struct sk_buff *skb, struct net_device *netdev)  	frag_count = skb_shinfo(skb)->nr_frags + 1; +	/* 14 frags supported for normal packet and +	 * 32 frags supported for TSO packet +	 */ +	if (!skb_is_gso(skb) && frag_count > NETXEN_MAX_FRAGS_PER_TX) { + +		for (i = 0; i < (frag_count - NETXEN_MAX_FRAGS_PER_TX); i++) { +			frag = &skb_shinfo(skb)->frags[i]; +			delta += frag->size; +		} + +		if (!__pskb_pull_tail(skb, delta)) +			goto drop_packet; + +		frag_count = 1 + skb_shinfo(skb)->nr_frags; +	}  	/* 4 fragments per cmd des */  	no_of_desc = (frag_count + 3) >> 2; | 
