bnxt_en: Fix xmit_more with BQL.
authorMichael Chan <michael.chan@broadcom.com>
Wed, 31 May 2017 00:03:00 +0000 (20:03 -0400)
committerDavid S. Miller <davem@davemloft.net>
Wed, 31 May 2017 02:37:06 +0000 (22:37 -0400)
We need to write the doorbell if BQL has stopped the queue and
skb->xmit_more is set.  Otherwise it is possible for the tx queue to
rot and cause tx timeout.

Fixes: 4d172f21cefe ("bnxt_en: Implement xmit_more.")
Suggested-by: Yuval Mintz <yuval.mintz@cavium.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/bnxt/bnxt.c

index 954758f9a177da08193359e98a170197d11d59ad..c1cd72a5eccf80d8ab171681d24f608bd6dace1b 100644 (file)
@@ -463,7 +463,7 @@ normal_tx:
        prod = NEXT_TX(prod);
        txr->tx_prod = prod;
 
-       if (!skb->xmit_more)
+       if (!skb->xmit_more || netif_xmit_stopped(txq))
                bnxt_db_write(bp, txr->tx_doorbell, DB_KEY_TX | prod);
 
 tx_done: