|
@@ -221,7 +221,7 @@ int bnx2x_tx_int(struct bnx2x *bp, struct bnx2x_fp_txdata *txdata)
|
|
|
|
|
|
if ((netif_tx_queue_stopped(txq)) &&
|
|
if ((netif_tx_queue_stopped(txq)) &&
|
|
(bp->state == BNX2X_STATE_OPEN) &&
|
|
(bp->state == BNX2X_STATE_OPEN) &&
|
|
- (bnx2x_tx_avail(bp, txdata) >= MAX_SKB_FRAGS + 4))
|
|
|
|
|
|
+ (bnx2x_tx_avail(bp, txdata) >= MAX_DESC_PER_TX_PKT))
|
|
netif_tx_wake_queue(txq);
|
|
netif_tx_wake_queue(txq);
|
|
|
|
|
|
__netif_tx_unlock(txq);
|
|
__netif_tx_unlock(txq);
|
|
@@ -2948,7 +2948,9 @@ netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
|
txdata->cid, fp_index, txdata_index, txdata, fp); */
|
|
txdata->cid, fp_index, txdata_index, txdata, fp); */
|
|
|
|
|
|
if (unlikely(bnx2x_tx_avail(bp, txdata) <
|
|
if (unlikely(bnx2x_tx_avail(bp, txdata) <
|
|
- (skb_shinfo(skb)->nr_frags + 3))) {
|
|
|
|
|
|
+ skb_shinfo(skb)->nr_frags +
|
|
|
|
+ BDS_PER_TX_PKT +
|
|
|
|
+ NEXT_CNT_PER_TX_PKT(MAX_BDS_PER_TX_PKT))) {
|
|
bnx2x_fp_qstats(bp, txdata->parent_fp)->driver_xoff++;
|
|
bnx2x_fp_qstats(bp, txdata->parent_fp)->driver_xoff++;
|
|
netif_tx_stop_queue(txq);
|
|
netif_tx_stop_queue(txq);
|
|
BNX2X_ERR("BUG! Tx ring full when queue awake!\n");
|
|
BNX2X_ERR("BUG! Tx ring full when queue awake!\n");
|
|
@@ -3223,7 +3225,7 @@ netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
|
|
|
|
|
txdata->tx_bd_prod += nbd;
|
|
txdata->tx_bd_prod += nbd;
|
|
|
|
|
|
- if (unlikely(bnx2x_tx_avail(bp, txdata) < MAX_SKB_FRAGS + 4)) {
|
|
|
|
|
|
+ if (unlikely(bnx2x_tx_avail(bp, txdata) < MAX_DESC_PER_TX_PKT)) {
|
|
netif_tx_stop_queue(txq);
|
|
netif_tx_stop_queue(txq);
|
|
|
|
|
|
/* paired memory barrier is in bnx2x_tx_int(), we have to keep
|
|
/* paired memory barrier is in bnx2x_tx_int(), we have to keep
|
|
@@ -3232,7 +3234,7 @@ netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
|
smp_mb();
|
|
smp_mb();
|
|
|
|
|
|
bnx2x_fp_qstats(bp, txdata->parent_fp)->driver_xoff++;
|
|
bnx2x_fp_qstats(bp, txdata->parent_fp)->driver_xoff++;
|
|
- if (bnx2x_tx_avail(bp, txdata) >= MAX_SKB_FRAGS + 4)
|
|
|
|
|
|
+ if (bnx2x_tx_avail(bp, txdata) >= MAX_DESC_PER_TX_PKT)
|
|
netif_tx_wake_queue(txq);
|
|
netif_tx_wake_queue(txq);
|
|
}
|
|
}
|
|
txdata->tx_pkt++;
|
|
txdata->tx_pkt++;
|