diff mbox

ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue...?

Message ID 20171213152017.GA3554@redhat.com (mailing list archive)
State RFC
Delegated to: Kalle Valo
Headers show

Commit Message

Stanislaw Gruszka Dec. 13, 2017, 3:20 p.m. UTC
On Mon, Dec 11, 2017 at 09:51:29PM +0100, Enrico Mioso wrote:
> Hello guys, and sorry for the big CC list.
> I would like to point out about a bug who survived for years - at least from 2015 until now, regarding the Ralink driver getting stuck, and in some cases not being able to recover.
> The problem manifested with an MT7620A chip, and the wireless card inside the WL-330N3G device.
> The error message is in rt2x00/rt2x00queue.c .
> 
> This bug was discussed, and a patch proposed, in this thread:
> https://lists.openwrt.org/pipermail/openwrt-devel/2015-September/thread.html#35778
> 
> I would like to help if possible - I have the have both an Archer MR200, and the WL330n3G hardware.
> BTW, the Archer MR200 is a nice MT7610 device, and the problem manifests itself, see:
> https://forum.openwrt.org/viewtopic.php?id=64293&p=6
> 
> Any help, hint, anything would be apreciated.
> thank you to all.

First I would try to remove this patch:
http://git.lede-project.org/?p=source.git;a=blob;f=package/kernel/mac80211/patches/600-23-rt2x00-rt2800mmio-add-a-workaround-for-spurious-TX_F.patch
and see if it makes things better. However I think for the stuck problem
we need tx status timeout mechanism similar like for rt2800usb.

Attached patch can mitigate "Dropping frame due to full tx queue" 
errors. I did not test it, so it can be totally broken.

Regards
Stanislaw

Comments

Enrico Mioso Dec. 16, 2017, 6:33 p.m. UTC | #1
Hello!
I tested the Archer MR200 device removing the patch as you suggested:
package/kernel/mac80211/patches/600-23-rt2x00-rt2800mmio-add-a-workaround-for-spurious-TX_F.patch
... the error still appears, but the driver is still working as of now.
Here - reporting my dmesg
[  819.060392] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
[  819.069900] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
[  819.079369] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
[  819.088823] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
[  819.098277] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
[  819.107729] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
[  819.117174] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
[  819.126627] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
[  819.136080] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
[  819.145533] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
[  819.154987] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
[  819.164441] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
[  819.173890] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
[  819.183336] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
[  819.192782] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
[  819.202200] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
[  819.211644] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
[  819.221090] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
[  819.230537] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
[  819.239983] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
[  819.249430] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2

To cause it, it seems a good technique to use a device as far as possible from the AP, but not enough to disconnect / stop working.
A reauthentication may be required to use the AP again,

Sat Dec 16 17:59:01 2017 daemon.info hostapd: wlan0: STA xx:xx:xx:xx:xx:xx IEEE 802.11: authenticated
Sat Dec 16 17:59:01 2017 daemon.info hostapd: wlan0: STA xx:xx:xx:xx:xx:xx IEEE 802.11: associated (aid 1)
Sat Dec 16 17:59:01 2017 daemon.notice hostapd: wlan0: AP-STA-CONNECTED xx:xx:xx:xx:xx:xx
Sat Dec 16 17:59:01 2017 daemon.info hostapd: wlan0: STA xx:xx:xx:xx:xx:xx WPA: pairwise key handshake completed (RSN)
Sat Dec 16 18:04:20 2017 kern.err kernel: [  819.060392] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
Sat Dec 16 18:04:20 2017 kern.err kernel: [  819.069900] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
Sat Dec 16 18:04:20 2017 kern.err kernel: [  819.079369] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
Sat Dec 16 18:04:20 2017 kern.err kernel: [  819.088823] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
Sat Dec 16 18:04:20 2017 kern.err kernel: [  819.098277] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
Sat Dec 16 18:04:20 2017 kern.err kernel: [  819.107729] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
Sat Dec 16 18:04:20 2017 kern.err kernel: [  819.117174] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
Sat Dec 16 18:04:20 2017 kern.err kernel: [  819.126627] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
Sat Dec 16 18:04:20 2017 kern.err kernel: [  819.136080] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
Sat Dec 16 18:04:20 2017 kern.err kernel: [  819.145533] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
Sat Dec 16 18:04:20 2017 kern.err kernel: [  819.154987] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
Sat Dec 16 18:04:20 2017 kern.err kernel: [  819.164441] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
Sat Dec 16 18:04:20 2017 kern.err kernel: [  819.173890] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
Sat Dec 16 18:04:20 2017 kern.err kernel: [  819.183336] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
Sat Dec 16 18:04:20 2017 kern.err kernel: [  819.192782] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
Sat Dec 16 18:04:20 2017 kern.err kernel: [  819.202200] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
Sat Dec 16 18:04:20 2017 kern.err kernel: [  819.211644] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
Sat Dec 16 18:04:20 2017 kern.err kernel: [  819.221090] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
Sat Dec 16 18:04:20 2017 kern.err kernel: [  819.230537] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
Sat Dec 16 18:04:20 2017 kern.err kernel: [  819.239983] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
Sat Dec 16 18:04:20 2017 kern.err kernel: [  819.249430] ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
Sat Dec 16 18:11:11 2017 daemon.info hostapd: wlan0: STA x2:x2:x2:x2:x2:x2 IEEE 802.11: authenticated
Sat Dec 16 18:11:11 2017 daemon.info hostapd: wlan0: STA x2:x2:x2:x2:x2:x2 IEEE 802.11: associated (aid 2)
Sat Dec 16 18:11:11 2017 daemon.notice hostapd: wlan0: AP-STA-CONNECTED x2:x2:x2:x2:x2:x2
Sat Dec 16 18:11:11 2017 daemon.info hostapd: wlan0: STA x2:x2:x2:x2:x2:x2 WPA: pairwise key handshake completed (RSN)
Sat Dec 16 18:18:43 2017 daemon.notice hostapd: wlan0: AP-STA-DISCONNECTED x2:x2:x2:x2:x2:x2
Sat Dec 16 18:18:43 2017 daemon.info hostapd: wlan0: STA x2:x2:x2:x2:x2:x2 IEEE 802.11: disassociated due to inactivity
Sat Dec 16 18:18:44 2017 daemon.info hostapd: wlan0: STA x2:x2:x2:x2:x2:x2 IEEE 802.11: deauthenticated due to inactivity (timer DEAUTH/REMOVE)
Sat Dec 16 18:19:03 2017 daemon.notice hostapd: wlan0: AP-STA-DISCONNECTED xx:xx:xx:xx:xx:xx
Sat Dec 16 18:19:03 2017 daemon.info hostapd: wlan0: STA xx:xx:xx:xx:xx:xx IEEE 802.11: disassociated due to inactivity
Sat Dec 16 18:19:04 2017 daemon.info hostapd: wlan0: STA xx:xx:xx:xx:xx:xx IEEE 802.11: deauthenticated due to inactivity (timer DEAUTH/REMOVE)
Sat Dec 16 19:16:03 2017 daemon.info hostapd: wlan0: STA xx:xx:xx:xx:xx:xx IEEE 802.11: authenticated
Sat Dec 16 19:16:03 2017 daemon.info hostapd: wlan0: STA xx:xx:xx:xx:xx:xx IEEE 802.11: associated (aid 1)
Sat Dec 16 19:16:03 2017 daemon.notice hostapd: wlan0: AP-STA-CONNECTED xx:xx:xx:xx:xx:xx
Sat Dec 16 19:16:03 2017 daemon.info hostapd: wlan0: STA xx:xx:xx:xx:xx:xx WPA: pairwise key handshake completed (RSN)

where the xx:xx... mac is an iPhone SE, the x2:x2... is an Android device.

thank you very much for the help and all.
For the moment I am not sure about the situation still, so I think further testing would be needed. Hoping someone experiencing this problem can come up and give some more hints / tests on different hw.
Thank you to all,
Enrico

On Wed, 13 Dec 2017, Stanislaw Gruszka wrote:

> Date: Wed, 13 Dec 2017 16:20:18
> From: Stanislaw Gruszka <sgruszka@redhat.com>
> To: Enrico Mioso <mrkiko.rs@gmail.com>
> Cc: linux-wireless@vger.kernel.org, Johannes Berg <johannes.berg@intel.com>,
>     Daniel Golle <daniel@makrotopia.org>, Arnd Bergmann <arnd@arndb.de>,
>     John Crispin <john@phrozen.org>, nbd@nbd.name
> Subject: Re: ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping
>     frame due to full tx queue...?
> 
> On Mon, Dec 11, 2017 at 09:51:29PM +0100, Enrico Mioso wrote:
>> Hello guys, and sorry for the big CC list.
>> I would like to point out about a bug who survived for years - at least from 2015 until now, regarding the Ralink driver getting stuck, and in some cases not being able to recover.
>> The problem manifested with an MT7620A chip, and the wireless card inside the WL-330N3G device.
>> The error message is in rt2x00/rt2x00queue.c .
>>
>> This bug was discussed, and a patch proposed, in this thread:
>> https://lists.openwrt.org/pipermail/openwrt-devel/2015-September/thread.html#35778
>>
>> I would like to help if possible - I have the have both an Archer MR200, and the WL330n3G hardware.
>> BTW, the Archer MR200 is a nice MT7610 device, and the problem manifests itself, see:
>> https://forum.openwrt.org/viewtopic.php?id=64293&p=6
>>
>> Any help, hint, anything would be apreciated.
>> thank you to all.
>
> First I would try to remove this patch:
> http://git.lede-project.org/?p=source.git;a=blob;f=package/kernel/mac80211/patches/600-23-rt2x00-rt2800mmio-add-a-workaround-for-spurious-TX_F.patch
> and see if it makes things better. However I think for the stuck problem
> we need tx status timeout mechanism similar like for rt2800usb.
>
> Attached patch can mitigate "Dropping frame due to full tx queue"
> errors. I did not test it, so it can be totally broken.
>
> Regards
> Stanislaw
>
Enrico Mioso Dec. 26, 2017, 5:20 p.m. UTC | #2
Ok, observing a stall. Unfortunately, it still happens.
Ufh...
dmesg:

may I do something else?



Linux version 4.9.70 (mrkiko@gatosaldo) (gcc version 5.5.0 (OpenWrt GCC 5.5.0 r5616-67c1c145f0) ) #0 Sun Dec 24 16:06:16 2017
SoC Type: Ralink RT3350 id:1 rev:2
bootconsole [early0] enabled
CPU0 revision is: 0001964c (MIPS 24KEc)
MIPS: machine is Asus WL-330N3G
Determined physical RAM map:
  memory: 02000000 @ 00000000 (usable)
Initrd not found or empty - disabling initrd
Primary instruction cache 32kB, VIPT, 4-way, linesize 32 bytes.
Primary data cache 16kB, 4-way, VIPT, no aliases, linesize 32 bytes
Zone ranges:
   Normal   [mem 0x0000000000000000-0x0000000001ffffff]
Movable zone start for each node
Early memory node ranges
   node   0: [mem 0x0000000000000000-0x0000000001ffffff]
Initmem setup node 0 [mem 0x0000000000000000-0x0000000001ffffff]
On node 0 totalpages: 8192
free_area_init_node: node 0, pgdat 8037e834, node_mem_map 81000020
   Normal zone: 64 pages used for memmap
   Normal zone: 0 pages reserved
   Normal zone: 8192 pages, LIFO batch:0
pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
pcpu-alloc: [0] 0 
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 8128
Kernel command line: console=ttyS0,57600 rootfstype=squashfs,jffs2
PID hash table entries: 128 (order: -3, 512 bytes)
Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)
Writing ErrCtl register=0003c00b
Readback ErrCtl register=0003c00b
Memory: 28436K/32768K available (3061K kernel code, 147K rwdata, 372K rodata, 188K init, 200K bss, 4332K reserved, 0K cma-reserved)
SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
NR_IRQS:256
CPU Clock: 320MHz
clocksource_probe: no matching clocksources found
clocksource: MIPS: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 11945377789 ns
sched_clock: 32 bits at 160MHz, resolution 6ns, wraps every 13421772796ns
Calibrating delay loop... 212.58 BogoMIPS (lpj=1062912)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
futex hash table entries: 256 (order: -1, 3072 bytes)
pinctrl core: initialized pinctrl subsystem
NET: Registered protocol family 16
Can't analyze schedule() prologue at 802f97f0
rt2880_gpio 10000600.gpio: registering 24 gpios
rt2880_gpio 10000600.gpio: registering 24 irq handlers
clocksource: Switched to clocksource MIPS
NET: Registered protocol family 2
TCP established hash table entries: 1024 (order: 0, 4096 bytes)
TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
TCP: Hash tables configured (established 1024 bind 1024)
UDP hash table entries: 256 (order: 0, 4096 bytes)
UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
NET: Registered protocol family 1
rt-timer 10000100.timer: maximum frequency is 3255Hz
workingset: timestamp_bits=30 max_order=13 bucket_order=0
squashfs: version 4.0 (2009/01/31) Phillip Lougher
jffs2: version 2.2 (NAND) (SUMMARY) (LZMA) (RTIME) (CMODE_PRIORITY) (c) 2001-2006 Red Hat, Inc.
io scheduler noop registered
io scheduler deadline registered (default)
Serial: 8250/16550 driver, 2 ports, IRQ sharing disabled
console [ttyS0] disabled
10000c00.uartlite: ttyS0 at MMIO 0x10000c00 (irq = 20, base_baud = 6666666) is a Palmchip BK-3103
console [ttyS0] enabled
bootconsole [early0] disabled
spi spi0.0: force spi mode3
m25p80 spi0.0: w25q32 (4096 Kbytes)
4 ofpart partitions found on MTD device spi0.0
Creating 4 MTD partitions on "spi0.0":
0x000000000000-0x000000030000 : "u-boot"
0x000000030000-0x000000040000 : "u-boot-env"
0x000000040000-0x000000050000 : "factory"
0x000000050000-0x000000400000 : "firmware"
2 uimage-fw partitions found on MTD device firmware
0x000000050000-0x0000001758ed : "kernel"
0x0000001758ed-0x000000400000 : "rootfs"
mtd: device 5 (rootfs) set to be root filesystem
1 squashfs-split partitions found on MTD device rootfs
0x00000032c000-0x000000400000 : "rootfs_data"
libphy: Fixed MDIO Bus: probed
rt3050-esw 10110000.esw: link changed 0x10
mtk_soc_eth 10100000.ethernet eth0: mediatek frame engine at 0xb0100000, irq 5
rt2880_wdt 10000120.watchdog: Initialized
NET: Registered protocol family 10
NET: Registered protocol family 17
8021q: 802.1Q VLAN Support v1.8
VFS: Mounted root (squashfs filesystem) readonly on device 31:5.
Freeing unused kernel memory: 188K
This architecture does not have kernel memory protection.
random: fast init done
init: Console is alive
init: - watchdog -
kmodloader: loading kernel modules from /etc/modules-boot.d/*
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
dwc2 101c0000.otg: Configuration mismatch. dr_mode forced to host
dwc2 101c0000.otg: DWC OTG Controller
dwc2 101c0000.otg: new USB bus registered, assigned bus number 1
dwc2 101c0000.otg: irq 26, io mem 0x00000000
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
kmodloader: done loading kernel modules from /etc/modules-boot.d/*
init: - preinit -
8021q: adding VLAN 0 to HW filter on device eth0
jffs2: notice: (311) jffs2_build_xattr_subsystem: complete building xattr subsystem, 0 of xdatum (0 unchecked, 0 orphan) and 0 of xref (0 dead, 0 orphan) found.
mount_root: switching to jffs2 overlay
urandom-seed: Seeding with /etc/urandom.seed
procd: - early -
procd: - watchdog -
procd: - watchdog -
procd: - ubus -
procd: - init -
kmodloader: loading kernel modules from /etc/modules.d/*
ip6_tables: (C) 2000-2006 Netfilter Core Team
Loading modules backported from Linux version wt-2017-11-01-0-gfe248fc2c180
Backport generated by backports.git v4.14-rc2-1-31-g86cf0e5d
ip_tables: (C) 2000-2006 Netfilter Core Team
nf_conntrack version 0.5.0 (1024 buckets, 4096 max)
xt_time: kernel timezone is -0000
rt2800_wmac 10180000.wmac: loaded eeprom from mtd device "factory"
ieee80211 phy0: rt2x00_set_rt: Info - RT chipset 2872, rev 0200 detected
ieee80211 phy0: rt2x00_set_rf: Info - RF chipset 0005 detected
ieee80211 phy0: Selected rate control algorithm 'minstrel_ht'
kmodloader: done loading kernel modules from /etc/modules.d/*
8021q: adding VLAN 0 to HW filter on device eth0
br-lan: port 1(eth0.1) entered blocking state
br-lan: port 1(eth0.1) entered disabled state
device eth0.1 entered promiscuous mode
device eth0 entered promiscuous mode
br-lan: port 1(eth0.1) entered blocking state
br-lan: port 1(eth0.1) entered forwarding state
IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
br-lan: port 2(wlan0) entered blocking state
br-lan: port 2(wlan0) entered disabled state
device wlan0 entered promiscuous mode
IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
br-lan: port 2(wlan0) entered blocking state
br-lan: port 2(wlan0) entered forwarding state
random: crng init done
rt3050-esw 10110000.esw: link changed 0x00
rt3050-esw 10110000.esw: link changed 0x10
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
ieee80211 phy0: rt2x00queue_write_tx_frame: Error - Dropping frame due to full tx queue 2
Stanislaw Gruszka Jan. 3, 2018, 11:45 a.m. UTC | #3
On Tue, Dec 26, 2017 at 06:20:22PM +0100, Enrico Mioso wrote:
> Ok, observing a stall. Unfortunately, it still happens.
<snip>
> rt2800_wmac 10180000.wmac: loaded eeprom from mtd device "factory"
> ieee80211 phy0: rt2x00_set_rt: Info - RT chipset 2872, rev 0200 detected
> ieee80211 phy0: rt2x00_set_rf: Info - RF chipset 0005 detected

Is possible that this is the FW problem for this particular RT2872
device or we do not correctly program registers for it. 

I think the issue is that at some point HW/FW is not capable to sent 
frames and do not report to driver failure of sending frames, hence
driver queue can not be moved forward. The solution to this will be
timeout mechanism for TX, similar like for rt2800usb, however this will
require substantial rt2800pci/mmio driver rewrite. I'm going to look
at this, but not sure when.

Cheers
Stanislaw
diff mbox

Patch

diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00mac.c b/drivers/net/wireless/ralink/rt2x00/rt2x00mac.c
index ecc96312a370..c8a6f163102f 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00mac.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00mac.c
@@ -152,16 +152,6 @@  void rt2x00mac_tx(struct ieee80211_hw *hw,
 	if (unlikely(rt2x00queue_write_tx_frame(queue, skb, control->sta, false)))
 		goto exit_fail;
 
-	/*
-	 * Pausing queue has to be serialized with rt2x00lib_txdone(). Note
-	 * we should not use spin_lock_bh variant as bottom halve was already
-	 * disabled before ieee80211_xmit() call.
-	 */
-	spin_lock(&queue->tx_lock);
-	if (rt2x00queue_threshold(queue))
-		rt2x00queue_pause_queue(queue);
-	spin_unlock(&queue->tx_lock);
-
 	return;
 
  exit_fail:
diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
index a2c1ca5c76d1..39d523bbb661 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
@@ -714,6 +714,13 @@  int rt2x00queue_write_tx_frame(struct data_queue *queue, struct sk_buff *skb,
 	rt2x00queue_write_tx_descriptor(entry, &txdesc);
 	rt2x00queue_kick_tx_queue(queue, &txdesc);
 
+	/*
+	 * Pausing queue has to be serialized with rt2x00lib_txdone(), so we
+	 * do this under queue->tx_lock. Bottom halve was already disabled
+	 * before ieee80211_xmit() call.
+	 */
+	if (rt2x00queue_threshold(queue))
+		rt2x00queue_pause_queue(queue);
 out:
 	spin_unlock(&queue->tx_lock);
 	return ret;