cxfb4vf: Call dev_kfree/consume_skb_any instead of [dev_]kfree_skb.
authorEric W. Biederman <ebiederm@xmission.com>
Sat, 15 Mar 2014 23:31:32 +0000 (16:31 -0700)
committerEric W. Biederman <ebiederm@xmission.com>
Tue, 25 Mar 2014 04:18:58 +0000 (21:18 -0700)
Replace kfree_skb with dev_consume_skb_any in free_tx_desc that can be
called in hard irq and other contexts. dev_consume_skb_any is used
as this function consumes successfully transmitted skbs.

Replace dev_kfree_skb with dev_kfree_skb_any in t4vf_eth_xmit that can
be called in hard irq and other contexts, on paths that drop the skb.

Replace dev_kfree_skb with dev_consume_skb_any in t4vf_eth_xmit that can
be called in hard irq and other contexts, on paths that successfully
transmit the skb.

Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
drivers/net/ethernet/chelsio/cxgb4vf/sge.c

index 0a89963c48ce78148d1abe6cd86151e850c24062..9cfa4b4bb089d398a1b687a71d32f0856d15fa47 100644 (file)
@@ -401,7 +401,7 @@ static void free_tx_desc(struct adapter *adapter, struct sge_txq *tq,
                if (sdesc->skb) {
                        if (need_unmap)
                                unmap_sgl(dev, sdesc->skb, sdesc->sgl, tq);
-                       kfree_skb(sdesc->skb);
+                       dev_consume_skb_any(sdesc->skb);
                        sdesc->skb = NULL;
                }
 
@@ -1275,7 +1275,7 @@ int t4vf_eth_xmit(struct sk_buff *skb, struct net_device *dev)
                 * need it any longer.
                 */
                inline_tx_skb(skb, &txq->q, cpl + 1);
-               dev_kfree_skb(skb);
+               dev_consume_skb_any(skb);
        } else {
                /*
                 * Write the skb's Scatter/Gather list into the TX Packet CPL
@@ -1354,7 +1354,7 @@ out_free:
         * An error of some sort happened.  Free the TX skb and tell the
         * OS that we've "dealt" with the packet ...
         */
-       dev_kfree_skb(skb);
+       dev_kfree_skb_any(skb);
        return NETDEV_TX_OK;
 }