aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/netxen/netxen_nic_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/netxen/netxen_nic_main.c')
-rw-r--r--drivers/net/netxen/netxen_nic_main.c17
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 201b944bd46..b644383017f 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)
1877 struct cmd_desc_type0 *hwdesc, *first_desc; 1877 struct cmd_desc_type0 *hwdesc, *first_desc;
1878 struct pci_dev *pdev; 1878 struct pci_dev *pdev;
1879 int i, k; 1879 int i, k;
1880 int delta = 0;
1881 struct skb_frag_struct *frag;
1880 1882
1881 u32 producer; 1883 u32 producer;
1882 int frag_count, no_of_desc; 1884 int frag_count, no_of_desc;
@@ -1884,6 +1886,21 @@ netxen_nic_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
1884 1886
1885 frag_count = skb_shinfo(skb)->nr_frags + 1; 1887 frag_count = skb_shinfo(skb)->nr_frags + 1;
1886 1888
1889 /* 14 frags supported for normal packet and
1890 * 32 frags supported for TSO packet
1891 */
1892 if (!skb_is_gso(skb) && frag_count > NETXEN_MAX_FRAGS_PER_TX) {
1893
1894 for (i = 0; i < (frag_count - NETXEN_MAX_FRAGS_PER_TX); i++) {
1895 frag = &skb_shinfo(skb)->frags[i];
1896 delta += frag->size;
1897 }
1898
1899 if (!__pskb_pull_tail(skb, delta))
1900 goto drop_packet;
1901
1902 frag_count = 1 + skb_shinfo(skb)->nr_frags;
1903 }
1887 /* 4 fragments per cmd des */ 1904 /* 4 fragments per cmd des */
1888 no_of_desc = (frag_count + 3) >> 2; 1905 no_of_desc = (frag_count + 3) >> 2;
1889 1906