#18922: eth1 (ag71xx): transmit queue 0 timed out
------------------------+--------------------------------
Reporter: fpv2000@… | Owner: developers
Type: defect | Status: reopened
Priority: normal | Milestone: Chaos Calmer 15.05
Component: kernel | Version: Trunk
Resolution: | Keywords:
------------------------+--------------------------------
Comment (by psyke83):
This patch solves the sirq storm that occurs after recovery from tx
timeout:
{{{
diff --git
a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c
b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c
index 31b38d7..f02f45e 100644
---
a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c
+++
b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c
@@ -183,6 +183,8 @@ static void ag71xx_ring_tx_init(struct ag71xx *ag)
ring->curr = 0;
ring->dirty = 0;
netdev_reset_queue(ag->dev);
+
+ ag71xx_wr(ag, AG71XX_REG_TX_DESC, ag->tx_ring.descs_dma);
}
static void ag71xx_ring_rx_clean(struct ag71xx *ag)
@@ -272,6 +274,8 @@ static int ag71xx_ring_rx_init(struct ag71xx *ag)
ring->curr = 0;
ring->dirty = 0;
+ ag71xx_wr(ag, AG71XX_REG_RX_DESC, ag->rx_ring.descs_dma);
+
return ret;
}
@@ -652,9 +656,6 @@ static int ag71xx_open(struct net_device *dev)
netif_carrier_off(dev);
ag71xx_phy_start(ag);
- ag71xx_wr(ag, AG71XX_REG_TX_DESC, ag->tx_ring.descs_dma);
- ag71xx_wr(ag, AG71XX_REG_RX_DESC, ag->rx_ring.descs_dma);
-
ag71xx_hw_set_macaddr(ag, dev->dev_addr);
netif_start_queue(dev);
@@ -872,6 +873,8 @@ static void ag71xx_restart_work_func(struct
work_struct *work)
if (ag71xx_get_pdata(ag)->is_ar724x) {
ag->link = 0;
+ ag71xx_rings_cleanup(ag);
+ ag71xx_rings_init(ag);
ag71xx_link_adjust(ag);
return;
}
}}}
I manually triggered a timeout a dozen times, and the interface recovered
each time without any issues or sirq storms. If someone can suggest a
better fix, please let me know. For the moment, one small issue is that
the ag71xx_rings_init return code is not handled, so if that function
fails for any reason, there could be problems.
--
Ticket URL: <https://dev.openwrt.org/ticket/18922#comment:28>
OpenWrt <http://openwrt.org>
Opensource Wireless Router Technology
_______________________________________________
openwrt-tickets mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-tickets