Trouble getting RT2770 USB device working stable

Live forum: http://rt2x00.serialmonkey.com/viewtopic.php?t=6136

cli

28-03-2011 17:36:08

Hi there!

I recently bought a usb network adapter using the RT2770 chipset, which works fine with Windows.
[code282aa606]Bus 001 Device 002: ID 148f:2770 Ralink Technology, Corp. RT2770 Wireless Adapter[/code282aa606]
With Debian's recent 2.6.38.1 kernel it works fine for a minutes or seconds (using the rt2800usb module) and then I get kernel oopses
[code282aa606]
[ 358.368068] WARNING: at /build/buildd-linux-2.6_2.6.38-1-amd64-t80ZCo
/linux-2.6-2.6.38/debian/build/source_amd64_none/net/mac80211/tx.c:661 invoke_tx_handlers+0x709/0xd72 [mac80211]()
[ 358.368073] Hardware name:
[ 358.368076] wlan1: Dropped data frame as no usable bitrate found while scanning and associated.
Target station: bc:05:43:b2:45:0f on 5 GHz band
..
[ 358.368165] Pid: 246, comm: kworker/u:4 Tainted: P O 2.6.38-1-amd64 #1
[ 358.368168] Call Trace:
[ 358.368177] [<ffffffff81046cf8>] ? warn_slowpath_common+0x78/0x8c
[ 358.368182] [<ffffffff81046dab>] ? warn_slowpath_fmt+0x45/0x4a
[ 358.368193] [<ffffffffa061ca20>] ? invoke_tx_handlers+0x709/0xd72 [mac80211]
[ 358.368204] [<ffffffffa061d2cb>] ? ieee80211_tx+0x6d/0x1d9 [mac80211]
[ 358.368209] [<ffffffff81266b94>] ? dev_alloc_skb+0x16/0x2d
[ 358.368216] [<ffffffff810ecc12>] ? __kmalloc_node_track_caller+0x10a/0x12a
[ 358.368220] [<ffffffff81265c3a>] ? __alloc_skb+0x72/0x12e
[ 358.368230] [<ffffffffa061d5bb>] ? ieee80211_xmit+0x184/0x193 [mac80211]
[ 358.368234] [<ffffffff81266b94>] ? dev_alloc_skb+0x16/0x2d
[ 358.368244] [<ffffffffa06103c6>] ? ieee80211_dynamic_ps_enable_work+0x0/0x82 [mac80211]
[ 358.368255] [<ffffffffa061d612>] ? ieee80211_tx_skb+0x48/0x51 [mac80211]
[ 358.368264] [<ffffffffa0610408>] ? ieee80211_dynamic_ps_enable_work+0x42/0x82 [mac80211]
[ 358.368270] [<ffffffff8105af6a>] ? process_one_work+0x1d1/0x2ee
[ 358.368275] [<ffffffff8105ceb0>] ? worker_thread+0x12d/0x247
[ 358.368278] [<ffffffff8105cd83>] ? worker_thread+0x0/0x247
[ 358.368282] [<ffffffff8105cd83>] ? worker_thread+0x0/0x247
[ 358.368287] [<ffffffff8105fcdf>] ? kthread+0x7a/0x82
[ 358.368291] [<ffffffff8100a764>] ? kernel_thread_helper+0x4/0x10
[ 358.368296] [<ffffffff8105fc65>] ? kthread+0x0/0x82
[ 358.368299] [<ffffffff8100a760>] ? kernel_thread_helper+0x0/0x10
[ 358.368303] ---[ end trace b8ca537ab5175559 ]---
[/code282aa606]

I disabled the power management of the device and the oopses disappeared, but the device still stops transmitting any packets after a short amount of time.
So I compiled the 2.6.38.1 vanilla for myself with debug information in the Ralink drivers and now I get warnings (and still no properly working device)
[code282aa606]
[ 444.836732] phy0 -> rt2x00lib_rxdone_read_signal: Warning - Frame received with unrecognized signal, mode=0x0000, signal=0x0000, type=4.
[ 444.836752] phy0 -> rt2x00lib_rxdone_read_signal: Warning - Frame received with unrecognized signal, mode=0x0000, signal=0x0000, type=4.
[ 444.977469] phy0 -> rt2800_txdone_entry_check: Warning - TX status report missed for queue 2 entry 44
[ 444.978464] phy0 -> rt2800_txdone_entry_check: Warning - TX status report missed for queue 2 entry 48
[ 445.805525] phy0 -> rt2x00usb_watchdog_tx_status: Warning - TX queue 0 status timed out, invoke forced tx handler
[ 446.780043] phy0 -> rt2x00queue_flush_queue: Warning - Queue 0 failed to flush
[ 446.797732] phy0 -> rt2x00lib_rxdone_read_signal: Warning - Frame received with unrecognized signal, mode=0x0000, signal=0x0000, type=4.
..
[ 446.798013] phy0 -> rt2x00lib_rxdone_read_signal: Warning - Frame received with unrecognized signal, mode=0x0000, signal=0x0000, type=4.
[ 446.804472] phy0 -> rt2x00usb_watchdog_tx_status: Warning - TX queue 0 status timed out, invoke forced tx handler
[ 447.090471] phy0 -> rt2800_txdone_entry_check: Warning - TX status report missed for queue 2 entry 50
[ 447.153346] phy0 -> rt2800_txdone_entry_check: Warning - TX status report missed for queue 2 entry 53
[ 447.554354] phy0 -> rt2800_txdone_entry_check: Warning - TX status report missed for queue 2 entry 54
[ 447.561361] phy0 -> rt2800_txdone_entry_check: Warning - TX status report missed for queue 2 entry 58
[ 447.561384] phy0 -> rt2800_txdone_entry_check: Warning - TX status report missed for queue 2 entry 59
[ 447.693348] phy0 -> rt2800_txdone_entry_check: Warning - TX status report missed for queue 2 entry 60
[ 448.616351] phy0 -> rt2800_txdone_entry_check: Warning - TX status report missed for queue 2 entry 62
[ 449.146361] phy0 -> rt2800_txdone_entry_check: Warning - TX status report missed for queue 2 entry 63
[ 449.707352] phy0 -> rt2800_txdone_entry_check: Warning - TX status report missed for queue 2 entry 0
[ 449.760349] phy0 -> rt2800_txdone_entry_check: Warning - TX status report missed for queue 2 entry 1
[ 450.804473] phy0 -> rt2x00usb_watchdog_tx_status: Warning - TX queue 0 status timed out, invoke forced tx handler
[ 451.692036] phy0 -> rt2x00queue_flush_queue: Warning - Queue 0 failed to flush
[ 451.776101] phy0 -> rt2800_txdone_entry_check: Warning - TX status report missed for queue 2 entry 4
[ 451.776115] phy0 -> rt2800_txdone_entry_check: Warning - TX status report missed for queue 2 entry 5
[ 451.778342] phy0 -> rt2800_txdone_entry_check: Warning - TX status report missed for queue 2 entry 7
[ 451.778589] phy0 -> rt2800_txdone_entry_check: Warning - TX status report missed for queue 2 entry 8
[ 451.779214] phy0 -> rt2800_txdone_entry_check: Warning - TX status report missed for queue 2 entry 9
[ 451.817358] phy0 -> rt2800_txdone_entry_check: Warning - TX status report missed for queue 2 entry 10
[ 451.937353] phy0 -> rt2800_txdone_entry_check: Warning - TX status report missed for queue 2 entry 11
[ 452.804474] phy0 -> rt2x00usb_watchdog_tx_status: Warning - TX queue 0 status timed out, invoke forced tx handler
[ 453.572036] phy0 -> rt2x00queue_flush_queue: Warning - Queue 0 failed to flush
[ 453.656861] phy0 -> rt2800_txdone_entry_check: Warning - TX status report missed for queue 2 entry 14
[ 453.656875] phy0 -> rt2800_txdone_entry_check: Warning - TX status report missed for queue 2 entry 15
[ 453.656966] phy0 -> rt2800_txdone_entry_check: Warning - TX status report missed for queue 2 entry 17
[ 453.656975] phy0 -> rt2800_txdone_entry_check: Warning - TX status report missed for queue 2 entry 18
[ 453.657090] phy0 -> rt2800_txdone_entry_check: Warning - TX status report missed for queue 2 entry 20
[ 453.665345] phy0 -> rt2800_txdone_entry_check: Warning - TX status report missed for queue 2 entry 21
[ 454.804474] phy0 -> rt2x00usb_watchdog_tx_status: Warning - TX queue 0 status timed out, invoke forced tx handler
[ 455.452038] phy0 -> rt2x00queue_flush_queue: Warning - Queue 0 failed to flush
[ 455.535475] phy0 -> rt2800_txdone_entry_check: Warning - TX status report missed for queue 2 entry 23
[ 455.804469] phy0 -> rt2x00usb_watchdog_tx_status: Warning - TX queue 0 status timed out, invoke forced tx handler
[ 456.804474] phy0 -> rt2x00usb_watchdog_tx_status: Warning - TX queue 0 status timed out, invoke forced tx handler
[ 457.332045] phy0 -> rt2x00queue_flush_queue: Warning - Queue 0 failed to flush
[ 457.560727] phy0 -> rt2800_txdone_entry_check: Warning - TX status report missed for queue 2 entry 33
[ 457.804472] phy0 -> rt2x00usb_watchdog_tx_status: Warning - TX queue 0 status timed out, invoke forced tx handler
[ 458.804471] phy0 -> rt2x00usb_watchdog_tx_status: Warning - TX queue 0 status timed out, invoke forced tx handler
[ 459.212047] phy0 -> rt2x00queue_flush_queue: Warning - Queue 0 failed to flush
[ 459.804463] phy0 -> rt2x00usb_watchdog_tx_status: Warning - TX queue 0 status timed out, invoke forced tx handler
[/code282aa606]

The warnings appear right from the beginning, even when the device works. As my RT2500 PCI card does not emit any warnings I consider them unusual.
Can someone explain this? How do I get this device working stable?

cli