ramips: fix ethernet driver tx completion polling
authornbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Sun, 1 Feb 2015 08:20:37 +0000 (08:20 +0000)
committernbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Sun, 1 Feb 2015 08:20:37 +0000 (08:20 +0000)
- budget is decremented with completed frames, so don't check if done is
smaller
- ACK the interrupt before processing further frames to fix a small race
condition.

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@44234 3c298f89-4303-0410-b956-a3cf2f4a3e73

target/linux/ramips/files/drivers/net/ethernet/ralink/ralink_soc_eth.c

index 9900a5e..12c6cca 100644 (file)
@@ -902,11 +902,11 @@ txpoll_again:
        if (!done)
                return 0;
 
-       if (done < budget) {
+       if (budget) {
+               fe_reg_w32(tx_intr, FE_REG_FE_INT_STATUS);
                hwidx = fe_reg_r32(FE_REG_TX_DTX_IDX0);
                if (idx != hwidx)
                        goto txpoll_again;
-               fe_reg_w32(tx_intr, FE_REG_FE_INT_STATUS);
        }
 
        netdev_completed_queue(netdev, done, bytes_compl);