aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
diff options
context:
space:
mode:
authorDmitry Kravkov <dmitry@broadcom.com>2012-12-01 23:05:48 -0500
committerDavid S. Miller <davem@davemloft.net>2012-12-02 20:22:59 -0500
commitc96bdc0c9e86ac243c5eff41c0c1418cbbc3057c (patch)
tree69f55dc016f47f432a268305b09f20ec69f530a0 /drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
parent4c704899328bcb448d9c7fa709777b3e28e05f6a (diff)
bnx2x: Filter packets on FCoE rings
Whenever bnx2x fails to transmit a packet due to a full Tx ring, if the ring size is zero (indicating an FCoE ring) driver filters the packet out and gracefully continues. Driver also gathers statistics on such filtered packets. Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com> Signed-off-by: Yuval Mintz <yuvalmin@broadcom.com> Signed-off-by: Eilon Greenstein <eilong@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c')
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
index e95174d451a5..5e07aa5e1aea 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
@@ -3127,11 +3127,16 @@ netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev)
3127 BDS_PER_TX_PKT + 3127 BDS_PER_TX_PKT +
3128 NEXT_CNT_PER_TX_PKT(MAX_BDS_PER_TX_PKT))) { 3128 NEXT_CNT_PER_TX_PKT(MAX_BDS_PER_TX_PKT))) {
3129 /* Handle special storage cases separately */ 3129 /* Handle special storage cases separately */
3130 if (txdata->tx_ring_size != 0) { 3130 if (txdata->tx_ring_size == 0) {
3131 BNX2X_ERR("BUG! Tx ring full when queue awake!\n"); 3131 struct bnx2x_eth_q_stats *q_stats =
3132 bnx2x_fp_qstats(bp, txdata->parent_fp);
3133 q_stats->driver_filtered_tx_pkt++;
3134 dev_kfree_skb(skb);
3135 return NETDEV_TX_OK;
3136 }
3132 bnx2x_fp_qstats(bp, txdata->parent_fp)->driver_xoff++; 3137 bnx2x_fp_qstats(bp, txdata->parent_fp)->driver_xoff++;
3133 netif_tx_stop_queue(txq); 3138 netif_tx_stop_queue(txq);
3134 } 3139 BNX2X_ERR("BUG! Tx ring full when queue awake!\n");
3135 3140
3136 return NETDEV_TX_BUSY; 3141 return NETDEV_TX_BUSY;
3137 } 3142 }