From eefd303f0cc11f8191d2e4e2088f77d8a3ff059b Mon Sep 17 00:00:00 2001
From: nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Date: Sun, 1 Feb 2015 08:20:37 +0000
Subject: [PATCH] ramips: fix ethernet driver tx completion polling

- 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
---
 .../ramips/files/drivers/net/ethernet/ralink/ralink_soc_eth.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/target/linux/ramips/files/drivers/net/ethernet/ralink/ralink_soc_eth.c b/target/linux/ramips/files/drivers/net/ethernet/ralink/ralink_soc_eth.c
index 9900a5e508..12c6ccaf98 100644
--- a/target/linux/ramips/files/drivers/net/ethernet/ralink/ralink_soc_eth.c
+++ b/target/linux/ramips/files/drivers/net/ethernet/ralink/ralink_soc_eth.c
@@ -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);
-- 
GitLab