[rt2x00-users] [PATCH 4/4] Revert "rt2x00: Endless loop on hub port power down"

Stanislaw Gruszka sgruszka at redhat.com
Tue Dec 2 23:15:32 AEDT 2014


On Tue, Dec 02, 2014 at 12:17:57PM +0100, Richard Genoud wrote:
> It tested this serie but unfortunately, reverting this still caused an infinite loop.
> (cf https://lkml.org/lkml/2014/4/3/492 to reproduce)

It is possible to disable internal hub? It fails here, but perhaps I do
not have compiled proper options in the kernel:

[stasiu at localhost Downloads]$ lsusb -t
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/3p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/8p, 480M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/3p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/6p, 480M
        |__ Port 3: Dev 3, If 0, Class=Vendor Specific Class, Driver=, 12M
        |__ Port 4: Dev 4, If 0, Class=Vendor Specific Class, Driver=btusb, 12M
        |__ Port 4: Dev 4, If 1, Class=Vendor Specific Class, Driver=btusb, 12M
        |__ Port 4: Dev 4, If 2, Class=Vendor Specific Class, Driver=, 12M
        |__ Port 4: Dev 4, If 3, Class=Application Specific Interface, Driver=, 12M
        |__ Port 6: Dev 5, If 0, Class=Video, Driver=uvcvideo, 480M
        |__ Port 6: Dev 5, If 1, Class=Video, Driver=uvcvideo, 480M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 480M
    |__ Port 2: Dev 2, If 0, Class=Vendor Specific Class, Driver=rt2800usb, 480M
    |__ Port 3: Dev 3, If 0, Class=Human Interface Device, Driver=usbhid, 12M
[stasiu at localhost Downloads]$ sudo ./hub-ctrl -b 1 -d 1 -P 1 -p 0
Device not found.
[stasiu at localhost Downloads]$ sudo ./hub-ctrl -b 1 -d 2 -P 2 -p 0
Device not found.

> [  642.476562] ieee80211 phy0: rt2800usb_watchdog: Warning - TX HW queue 1 timed out, invoke forced kick
> [  642.585937] ieee80211 phy0: rt2x00usb_vendor_request: Error - Vendor Request 0x06 failed for offset 0x0408 with error -71
> [  642.695312] ieee80211 phy0: rt2x00usb_vendor_request: Error - Vendor Request 0x06 failed for offset 0x0408 with error -71
> [  642.796875] ieee80211 phy0: rt2800usb_tx_sta_fifo_read_completed: Warning - TX status read failed -71
> [...]
> So it seems the "forced kick" is not done 

"Forced kick" does not mean to remove device, it means restarting
hardware queue. It is not done, because it requires write to PBF_CFG
register (0x0408), which is not possible.

I do not see an "infinite" loop. What I can see is continues failures
when sending requests to to the hardware. I consider this as proper
behaviour, taking that USB layer continuously return -EPROTO error. If
for example there will be not possible to down interface or remove
rt2800usb module in such condition, I would consider this as a minor
bug, but I'm not sure if that happen or not.

Stanislaw




More information about the users mailing list