mv643xx_eth: fix transmit-reclaim-in-napi-poll
authorLennert Buytenhek <buytenh@wantstofly.org>
Tue, 15 Jul 2008 11:34:51 +0000 (13:34 +0200)
committerLennert Buytenhek <buytenh@marvell.com>
Thu, 24 Jul 2008 04:22:51 +0000 (06:22 +0200)
The mv643xx_eth driver allows doing transmit reclaim from within the
napi poll routine, but after doing reclaim, it would forget to check
the free transmit descriptor count and wake up the transmit queue if
the reclaim caused enough descriptors for a new packet to become
available.  This would cause the netdev watchdog to occasionally kick
in during certain workloads with combined receive and transmit traffic.

Fix this by adding a wakeup check identical to the one in the
interrupt handler to the napi poll routine.

Signed-off-by: Lennert Buytenhek <buytenh@marvell.com>
drivers/net/mv643xx_eth.c

index d7620c50efb1031d48c1a6801da5555f0c0ecfd2..3211369a4320e2bda1fb7981bb5b703ed43d3d73 100644 (file)
@@ -626,6 +626,12 @@ static int mv643xx_eth_poll(struct napi_struct *napi, int budget)
                for (i = 0; i < 8; i++)
                        if (mp->txq_mask & (1 << i))
                                txq_reclaim(mp->txq + i, 0);
+
+               if (netif_carrier_ok(mp->dev)) {
+                       spin_lock(&mp->lock);
+                       __txq_maybe_wake(mp->txq + mp->txq_primary);
+                       spin_unlock(&mp->lock);
+               }
        }
 #endif