openwrt/target/linux/ath79
Petr Štetiar 5fd68d60e4 ath79: ag71xx: Fix tx queue timeouts during ifup
On ath79 and UBNT Bullet M XW (ar9342) I was experiencing weird issues during
network setup[1] which I was able to reproduce easily with following commands:

 uci set network.lan.ipaddr='192.168.1.20'
 uci commit network
 ifup lan

Which resulted after some time in:

 ...
 WARNING: CPU: 0 PID: 0 at net/sched/sch_generic.c:461 dev_watchdog+0x16c/0x280
 NETDEV WATCHDOG: eth0 (ag71xx): transmit queue 0 timed out
 ...

Sometimes I wasn't able to use networking anymore, sometimes it was enough to
just ifdown/ifup lan and network was backup. On ar71xx it was all working just
fine.

I've found out, that it was happening because ag71xx_poll() wasn't called, thus
the TX queue wasn't emptied. The ag71xx_poll() is being called from napi
hrtimer, which is enabled by napi_schedule() in ar71xx_interrupt(), but since
no interrupts were ever fired again after ag71xx_stop() was called, it was
always leading to tx queue timeouts:

 *** ag71xx_hard_start_xmit()
 eth0: packet injected into TX queue
 eth0: raw intr=00000001 TXPS POLL
 eth0: enable polling mode
 eth0: processing TX ring, flush=no
 eth0: disable polling mode, rx=1, tx=1,limit=32

 ( `ifup lan done here` )

 *** ag71xx_stop()
 *** ag71xx_open()
 *** ag71xx_hw_enable()
 IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
 IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
 *** ag71xx_hard_start_xmit()
 eth0: packet injected into TX queue
 *** ag71xx_hard_start_xmit()
 eth0: packet injected into TX queue
 ...
 WARNING: CPU: 0 PID: 0 at net/sched/sch_generic.c:320 dev_watchdog+0x164/0x274

So I've looked at ag71xx_stop() in ar71xx, added the missing bits to ath79 and
fixed this issue.

1. https://github.com/openwrt/openwrt/pull/1635#issuecomment-448638246

Signed-off-by: Petr Štetiar <ynezz@true.cz>
[move ag->link before ag71xx_hw_disable to retain ordering as original]
Signed-off-by: Koen Vandeputte <koen.vandeputte@ncentric.com>
2019-02-07 14:19:46 +01:00
..
base-files ath79: add support for TP-LINK Archer C7 v4 2019-02-05 19:37:31 +01:00
dts ath79: add support for TP-LINK Archer C7 v4 2019-02-05 19:37:31 +01:00
files ath79: ag71xx: Fix tx queue timeouts during ifup 2019-02-07 14:19:46 +01:00
generic ath79: add support for devolo WiFi pro 1200e 2018-12-27 14:06:38 +01:00
image ath79: add support for TP-LINK Archer C7 v4 2019-02-05 19:37:31 +01:00
nand treewide: use wpad-basic for not small flash targets 2018-10-16 15:07:41 +01:00
patches-4.14 kernel: bump 4.14 to 4.14.95 2019-01-24 10:10:45 +01:00
tiny treewide: use wpad-basic for not small flash targets 2018-10-16 15:07:41 +01:00
config-4.14 ath79: add support for D-Link DIR-859 A1 2018-12-30 20:08:13 +01:00
Makefile ath79: Remove source-only flag 2018-11-26 12:24:54 +01:00
modules.mk ath79: add new OF only target for QCA MIPS silicon 2018-05-07 08:06:51 +02:00