diff options
-rw-r--r-- | drivers/net/bnx2x_main.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/net/bnx2x_main.c b/drivers/net/bnx2x_main.c index ae62b67aa597..6c042a72d6cc 100644 --- a/drivers/net/bnx2x_main.c +++ b/drivers/net/bnx2x_main.c | |||
@@ -11428,9 +11428,12 @@ static netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
11428 | 11428 | ||
11429 | if (unlikely(bnx2x_tx_avail(fp) < MAX_SKB_FRAGS + 3)) { | 11429 | if (unlikely(bnx2x_tx_avail(fp) < MAX_SKB_FRAGS + 3)) { |
11430 | netif_tx_stop_queue(txq); | 11430 | netif_tx_stop_queue(txq); |
11431 | /* We want bnx2x_tx_int to "see" the updated tx_bd_prod | 11431 | |
11432 | if we put Tx into XOFF state. */ | 11432 | /* paired memory barrier is in bnx2x_tx_int(), we have to keep |
11433 | * ordering of set_bit() in netif_tx_stop_queue() and read of | ||
11434 | * fp->bd_tx_cons */ | ||
11433 | smp_mb(); | 11435 | smp_mb(); |
11436 | |||
11434 | fp->eth_q_stats.driver_xoff++; | 11437 | fp->eth_q_stats.driver_xoff++; |
11435 | if (bnx2x_tx_avail(fp) >= MAX_SKB_FRAGS + 3) | 11438 | if (bnx2x_tx_avail(fp) >= MAX_SKB_FRAGS + 3) |
11436 | netif_tx_wake_queue(txq); | 11439 | netif_tx_wake_queue(txq); |