[rt2x00-users] rt2x00usb_watchdog_tx_status: Warning - TX queue 0 status timed out
Ivo Van Doorn
ivdoorn at gmail.com
Tue Nov 30 20:01:38 UTC 2010
Hi,
> I'm trying to debug on rt2800usb the cause of the
> "rt2x00usb_watchdog_tx_status: Warning - TX queue x status timed out" warnings.
>
> First, two oddities I noticed in the code:
>
> 1. rt2800_txdone(): The check "if (pid >= QID_RX)" seems to be useless
> since TX_STA_FIFO_PID_QUEUE is a two-bit field
True but TX_STA_FIFO_PID_TYPE is more then 2 bits,
and TX_STA_FIFO_PID_TYPE is the value which is stored in the
'pid' variable.
> 2. the comment for TXWI_W1_PACKETID_ENTRY in rt2800.h says:
> * PACKETID_ENTRY: Part of PACKETID, THis is the queue entry index (1-3)
> * This identification number is calculated by ((idx % 3) + 1).
> * The (+1) is required to prevent PACKETID to become 0.
>
> Why is the value 0 avoided? When the entry->entry_idx wraps
> from 63 back to 0 TXWI_W1_PACKETID_ENTRY is set to 1 in both
> cases, which seems non-optimal.
0 is avoided because if PACKETID is 0, then no TX status
will be generated by the hardware. This is the behavior by the
hardware, so we can't do anything about that.
> I added a few printk (patch at the end of this mail) and got:
>
> [ 5968.717319] phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 3 - CWmin: 5, CWmax: 10, Aifs: 7, TXop: 0.
> [ 5968.765661] rt2x00usb_kick_tx_entry: submit Q 0 E 0
> [ 5968.770766] rt2x00usb_interrupt_txdone: irq for Q 0 E 0
> [ 5968.776771] rt2800_txdone
> [ 5968.780136] rt2800_txdone_entry_check: got Q 0 E 1
> [ 5995.730817] rt2x00usb_kick_tx_entry: submit Q 0 E 1
> [ 5995.735928] rt2x00usb_interrupt_txdone: irq for Q 0 E 1
> [ 5995.741332] rt2800_txdone
> [ 5995.744601] rt2800_txdone_entry_check: got Q 0 E 2
> [ 5996.266632] rt2x00usb_kick_tx_entry: submit Q 0 E 2
> [ 5996.271643] rt2x00usb_interrupt_txdone: irq for Q 0 E 2
> [ 5996.277128] rt2800_txdone
> [ 5996.965383] phy0 -> rt2x00usb_watchdog_tx_status: Warning - TX queue 0 status timed out, invoke forced tx handler
> [ 5996.975958] rt2800_txdone
> [ 5996.979109] rt2800_txdone_entry_check: got Q 0 E 3
>
> (In AP mode, no data traffic, AP is probably just responding
> to probe requests.)
>
> So, it looks like the packet was queued inside the device, but
> TX happens after the URB was completed and thus the
> TX_STA_FIFO entry only appears later. If this is normal
> device operation then we shouldn't wait for a 1 sec timeout?
> Or is there another explanation for this?
I have tried increasing the timeout in the past, and it didn't
help.
Ivo
More information about the users
mailing list