|
@@ -2099,6 +2099,7 @@ qlcnic_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
|
|
|
struct cmd_desc_type0 *hwdesc, *first_desc;
|
|
|
struct pci_dev *pdev;
|
|
|
struct ethhdr *phdr;
|
|
|
+ int delta = 0;
|
|
|
int i, k;
|
|
|
|
|
|
u32 producer;
|
|
@@ -2118,6 +2119,19 @@ qlcnic_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 > QLCNIC_MAX_FRAGS_PER_TX) {
|
|
|
+
|
|
|
+ for (i = 0; i < (frag_count - QLCNIC_MAX_FRAGS_PER_TX); i++)
|
|
|
+ delta += skb_shinfo(skb)->frags[i].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;
|