amd-xgbe: Prevent Tx cleanup stall
authorLendacky, Thomas <Thomas.Lendacky@amd.com>
Thu, 4 Dec 2014 17:52:35 +0000 (11:52 -0600)
committerDavid S. Miller <davem@davemloft.net>
Tue, 9 Dec 2014 19:47:46 +0000 (14:47 -0500)
When performing Tx cleanup, the dirty index counter is compared to the
current index counter as one of the tests used to determine when to stop
cleanup. The "less than" test will fail when the current index counter
rolls over to zero causing cleanup to never occur again. Update the test
to a "not equal" to avoid this situation.

Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/amd/xgbe/xgbe-drv.c

index 2349ea9702557b95de0860eb5921589104cd5c9d..d0e35302410f08a37141c56c98dcbc1c3c5e283a 100644 (file)
@@ -1554,7 +1554,7 @@ static int xgbe_tx_poll(struct xgbe_channel *channel)
        spin_lock_irqsave(&ring->lock, flags);
 
        while ((processed < XGBE_TX_DESC_MAX_PROC) &&
-              (ring->dirty < ring->cur)) {
+              (ring->dirty != ring->cur)) {
                rdata = XGBE_GET_DESC_DATA(ring, ring->dirty);
                rdesc = rdata->rdesc;