|
@@ -11428,9 +11428,12 @@ static netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
|
|
|
|
|
if (unlikely(bnx2x_tx_avail(fp) < MAX_SKB_FRAGS + 3)) {
|
|
|
netif_tx_stop_queue(txq);
|
|
|
- /* We want bnx2x_tx_int to "see" the updated tx_bd_prod
|
|
|
- if we put Tx into XOFF state. */
|
|
|
+
|
|
|
+ /* paired memory barrier is in bnx2x_tx_int(), we have to keep
|
|
|
+ * ordering of set_bit() in netif_tx_stop_queue() and read of
|
|
|
+ * fp->bd_tx_cons */
|
|
|
smp_mb();
|
|
|
+
|
|
|
fp->eth_q_stats.driver_xoff++;
|
|
|
if (bnx2x_tx_avail(fp) >= MAX_SKB_FRAGS + 3)
|
|
|
netif_tx_wake_queue(txq);
|