[openwrt/openwrt] Revert "ramips: ethernet: fix to interrupt handling"

LEDE Commits lede-commits at lists.infradead.org
Fri Sep 18 02:54:27 EDT 2020


jow pushed a commit to openwrt/openwrt.git, branch openwrt-19.07:
https://git.openwrt.org/34a96529041d4e9502c490c66f8af0154187c6d2

commit 34a96529041d4e9502c490c66f8af0154187c6d2
Author: Jo-Philipp Wich <jo at mein.io>
AuthorDate: Fri Sep 18 08:53:31 2020 +0200

    Revert "ramips: ethernet: fix to interrupt handling"
    
    This reverts commit 7ac454014a11347887323a131415ac7032d53546.
    
    The change reportedly causes regressions in ethernet performance.
    
    Fixes: FS#3332
    Signed-off-by: Jo-Philipp Wich <jo at mein.io>
---
 .../files-4.14/drivers/net/ethernet/mediatek/mtk_eth_soc.c    | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/target/linux/ramips/files-4.14/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/target/linux/ramips/files-4.14/drivers/net/ethernet/mediatek/mtk_eth_soc.c
index 3541b11240..b2c3d32c55 100644
--- a/target/linux/ramips/files-4.14/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/target/linux/ramips/files-4.14/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -876,8 +876,6 @@ static int fe_poll_rx(struct napi_struct *napi, int budget,
 	struct fe_rx_dma *rxd, trxd;
 	int done = 0, pad;
 
-	fe_reg_w32(rx_intr, FE_REG_FE_INT_STATUS);
-
 	if (netdev->features & NETIF_F_RXCSUM)
 		checksum_bit = soc->checksum_bit;
 	else
@@ -970,6 +968,9 @@ release_desc:
 		done++;
 	}
 
+	if (done < budget)
+		fe_reg_w32(rx_intr, FE_REG_FE_INT_STATUS);
+
 	return done;
 }
 
@@ -985,8 +986,6 @@ static int fe_poll_tx(struct fe_priv *priv, int budget, u32 tx_intr,
 	u32 idx, hwidx;
 	struct fe_tx_ring *ring = &priv->tx_ring;
 
-	fe_reg_w32(tx_intr, FE_REG_FE_INT_STATUS);
-
 	idx = ring->tx_free_idx;
 	hwidx = fe_reg_r32(FE_REG_TX_DTX_IDX0);
 
@@ -1010,7 +1009,9 @@ static int fe_poll_tx(struct fe_priv *priv, int budget, u32 tx_intr,
 	if (idx == hwidx) {
 		/* read hw index again make sure no new tx packet */
 		hwidx = fe_reg_r32(FE_REG_TX_DTX_IDX0);
-		if (idx != hwidx)
+		if (idx == hwidx)
+			fe_reg_w32(tx_intr, FE_REG_FE_INT_STATUS);
+		else
 			*tx_again = 1;
 	} else {
 		*tx_again = 1;



More information about the lede-commits mailing list