Re: Usb hub fast plug/unplug issue

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Jason,

This sounds like an issue similar to what Wang Chao is experiencing,
see http://marc.info/?l=linux-usb&m=131962188623590&w=2

On Tue, Nov 22, 2011 at 02:53:06AM +0000, Jasonwu wrote:
> Thanks for reply
> ########################################################################
> kernel version : 3.1.1
> ########################################################################
> usb host controller : 
>    a. fresco logic xhci FL1009 board.
>    b. NEC xhci host controller.
>    c. on board USB2 host controller.

Do you mean that you see the issue with device fast plug/unplug under a
USB 2.0 host controller as well, or just under the xHCI host controller?

Are you plugging and unplugging the USB 3.0 hub, or the devices attached
to the hub?

> ########################################################################
> dmesg after crash :
> 1. normal plug/unplug
> [   44.252626] hub 4-0:1.0: state 7 ports 2 chg 0000 evt 0002
> [   44.252638] hub 4-0:1.0: warm reset port 1
> [   44.253363] usb usb3: usb wakeup-resume
> [   44.253369] usb usb3: usb auto-resume
> [   44.268036] hub 3-0:1.0: hub_resume
> [   44.268047] hub 3-0:1.0: port 1: status 0100 change 0001
> [   44.276051] hub 4-0:1.0: port 1, status 02c0, change 0001, 5.0 Gb/s
> [   44.276055] usb 4-1: USB disconnect, device number 2
> [   44.276057] usb 4-1: unregistering device
> [   44.276059] usb 4-1: unregistering interface 4-1:1.0
> [   44.276090] xhci_hcd 0000:02:00.0: shutdown urb f5d44100 ep1in-intr
> [   44.278043] usb 4-1: usb_disable_device nuking all URBs
> [   44.278129] usb 4-1: Successful Endpoint Configure command
> [   44.404034] hub 4-0:1.0: debounce: port 1: total 100ms stable 100ms status 
> 0x2a0
> [   44.404039] hub 4-0:1.0: state 7 ports 2 chg 0000 evt 0002
> [   44.404042] hub 4-0:1.0: reset change on port 1
> [   44.404046] hub 4-0:1.0: warm reset change on port 1
> [   44.404054] hub 3-0:1.0: state 7 ports 2 chg 0002 evt 0000
> [   44.404059] hub 3-0:1.0: port 1, status 0100, change 0000, 12 Mb/s
> [   44.404061] usb 3-1: USB disconnect, device number 2
> [   44.404063] usb 3-1: unregistering device
> [   44.404065] usb 3-1: unregistering interface 3-1:1.0
> [   44.404117] usb 3-1: usb_disable_device nuking all URBs
> [   44.404212] usb 3-1: Successful Endpoint Configure command
> [   45.473010] hub 3-0:1.0: state 7 ports 2 chg 0000 evt 0002
> [   45.473022] hub 3-0:1.0: port 1, status 0101, change 0001, 12 Mb/s
> [   45.600033] hub 3-0:1.0: debounce: port 1: total 100ms stable 100ms status 
> 0x101
> [   45.712036] usb 3-1: new high speed USB device number 3 using xhci_hcd
> [   45.728728] xhci_hcd 0000:02:00.0: WARN: short transfer on control ep
> [   45.728736] usb 3-1: default language 0x0409
> [   45.728894] xhci_hcd 0000:02:00.0: WARN: short transfer on control ep
> [   45.728900] usb 3-1: udev 3, busnum 3, minor = 258
> [   45.728902] usb 3-1: New USB device found, idVendor=2109, idProduct=3431
> [   45.728903] usb 3-1: New USB device strings: Mfr=0, Product=1, SerialNumber=0
> [   45.728905] usb 3-1: Product: USB2.0 Hub
> [   45.729018] usb 3-1: usb_probe_device
> [   45.729021] usb 3-1: configuration #1 chosen from 1 choice
> [   45.729113] usb 3-1: Successful Endpoint Configure command
> [   45.729227] usb 3-1: adding 3-1:1.0 (config #1, interface 0)
> [   45.729248] hub 3-1:1.0: usb_probe_interface
> [   45.729250] hub 3-1:1.0: usb_probe_interface - got id
> [   45.729252] hub 3-1:1.0: USB hub found
> [   45.729351] xhci_hcd 0000:02:00.0: WARN: short transfer on control ep
> [   45.729357] hub 3-1:1.0: 4 ports detected
> [   45.729358] hub 3-1:1.0: standalone hub
> [   45.729360] hub 3-1:1.0: individual port power switching
> [   45.729361] hub 3-1:1.0: individual port over-current protection
> [   45.729363] hub 3-1:1.0: Single TT
> [   45.729365] hub 3-1:1.0: TT requires at most 32 FS bit times (2664 ns)
> [   45.729366] hub 3-1:1.0: Port indicators are supported
> [   45.729368] hub 3-1:1.0: power on to power good time: 100ms
> [   45.729548] usb 3-1: Successful Endpoint Configure command
> [   45.729632] hub 3-1:1.0: local power source is good
> [   45.729634] hub 3-1:1.0: enabling power on all ports
> [   45.736105] hub 4-0:1.0: state 7 ports 2 chg 0000 evt 0002
> [   45.736118] hub 4-0:1.0: port 1, status 0203, change 0001, 5.0 Gb/s
> [   45.864035] hub 4-0:1.0: debounce: port 1: total 100ms stable 100ms status 
> 0x203
> [   45.977552] usb 4-1: new SuperSpeed USB device number 3 using xhci_hcd
> [   46.622333] usb 4-1: skipped 1 descriptor after endpoint
> [   46.635425] xhci_hcd 0000:02:00.0: WARN: short transfer on control ep
> [   46.635448] usb 4-1: default language 0x0409
> [   46.648538] xhci_hcd 0000:02:00.0: WARN: short transfer on control ep
> [   46.661652] xhci_hcd 0000:02:00.0: WARN: short transfer on control ep
> [   46.661677] usb 4-1: udev 3, busnum 4, minor = 386
> [   46.661679] usb 4-1: New USB device found, idVendor=2109, idProduct=0810
> [   46.661681] usb 4-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
> [   46.661683] usb 4-1: Product: 4-Port USB 3.0 Hub
> [   46.661685] usb 4-1: Manufacturer: VIA Labs, Inc.
> [   46.661800] usb 4-1: usb_probe_device
> [   46.661803] usb 4-1: configuration #1 chosen from 1 choice
> [   46.661895] usb 4-1: Successful Endpoint Configure command
> [   46.665287] usb 4-1: adding 4-1:1.0 (config #1, interface 0)
> [   46.665333] hub 4-1:1.0: usb_probe_interface
> [   46.665336] hub 4-1:1.0: usb_probe_interface - got id
> [   46.665339] hub 4-1:1.0: USB hub found
> [   46.721174] hub 4-1:1.0: 4 ports detected
> [   46.721178] hub 4-1:1.0: standalone hub
> [   46.721179] hub 4-1:1.0: individual port power switching
> [   46.721181] hub 4-1:1.0: individual port over-current protection
> [   46.721183] hub 4-1:1.0: TT requires at most 8 FS bit times (666 ns)
> [   46.721184] hub 4-1:1.0: power on to power good time: 2ms
> [   46.724929] usb 4-1: Successful Endpoint Configure command
> [   46.728614] hub 4-1:1.0: local power source is good
> [   46.728619] hub 4-1:1.0: enabling power on all ports
> [   46.743195] hub 3-1:1.0: state 7 ports 4 chg 0000 evt 0000
> [   46.743204] hub 4-0:1.0: state 7 ports 2 chg 0000 evt 0002
> [   46.743211] hub 4-0:1.0: warm reset change on port 1
> [   46.852662] hub 4-1:1.0: state 7 ports 4 chg 0000 evt 0000
> 
> 2. Fast unplug/plug several times
> 
> [   48.800036] hub 3-1:1.0: hub_suspend
> [   48.820039] usb 3-1: usb auto-suspend
> [   50.836028] hub 3-0:1.0: hub_suspend
> [   50.836037] usb usb3: bus auto-suspend
> [   55.218150] hub 4-0:1.0: state 7 ports 2 chg 0000 evt 0002
> [   55.218162] hub 4-0:1.0: warm reset port 1
> [   55.221657] usb usb3: usb wakeup-resume
> [   55.221662] usb usb3: usb auto-resume
> [   55.236036] hub 3-0:1.0: hub_resume
> [   55.236046] hub 3-0:1.0: port 1: status 0100 change 0005
> [   55.240042] hub 4-0:1.0: port 1, status 02c0, change 0001, 5.0 Gb/s
> [   55.240046] usb 4-1: USB disconnect, device number 3
> [   55.240048] usb 4-1: unregistering device
> [   55.240050] usb 4-1: unregistering interface 4-1:1.0
> [   55.240081] xhci_hcd 0000:02:00.0: shutdown urb f009bb80 ep1in-intr
> [   55.242126] usb 4-1: usb_disable_device nuking all URBs
> [   55.242218] usb 4-1: Successful Endpoint Configure command
> [   55.368034] hub 4-0:1.0: debounce: port 1: total 100ms stable 100ms status 
> 0x2a0
> [   55.368039] hub 4-0:1.0: state 7 ports 2 chg 0000 evt 0002
> [   55.368042] hub 4-0:1.0: reset change on port 1
> [   55.368046] hub 4-0:1.0: warm reset change on port 1
> [   55.368055] hub 3-0:1.0: state 7 ports 2 chg 0002 evt 0002
> [   55.384033] usb 3-1: usb wakeup-resume
> [   55.384045] hub 3-0:1.0: port 1 status 0000.0100 after resume, -19
> [   55.384047] usb 3-1: can't resume, status -19
> [   55.384049] hub 3-0:1.0: logical disconnect on port 1
> [   55.384055] hub 3-0:1.0: resume on port 1, status -19
> [   55.384057] hub 3-0:1.0: port 1, status 0100, change 0004, 12 Mb/s
> [   55.384059] usb 3-1: USB disconnect, device number 3
> [   55.384060] usb 3-1: unregistering device
> [   55.384062] usb 3-1: unregistering interface 3-1:1.0
> [   55.384114] usb 3-1: usb_disable_device nuking all URBs
> [   55.384209] usb 3-1: Successful Endpoint Configure command
> [   55.384295] hub 3-0:1.0: state 7 ports 2 chg 0000 evt 0000
> [   56.007597] hub 3-0:1.0: state 7 ports 2 chg 0000 evt 0002
> [   56.007609] hub 3-0:1.0: port 1, status 0101, change 0001, 12 Mb/s
> [   56.132035] hub 3-0:1.0: debounce: port 1: total 100ms stable 100ms status 
> 0x101
> [   56.244035] usb 3-1: new high speed USB device number 4 using xhci_hcd
> [   56.260755] xhci_hcd 0000:02:00.0: WARN: short transfer on control ep
> [   56.260763] usb 3-1: default language 0x0409
> [   56.260921] xhci_hcd 0000:02:00.0: WARN: short transfer on control ep
> [   56.260926] usb 3-1: udev 4, busnum 3, minor = 259
> [   56.260928] usb 3-1: New USB device found, idVendor=2109, idProduct=3431
> [   56.260930] usb 3-1: New USB device strings: Mfr=0, Product=1, SerialNumber=0
> [   56.260932] usb 3-1: Product: USB2.0 Hub
> [   56.261040] usb 3-1: usb_probe_device
> [   56.261043] usb 3-1: configuration #1 chosen from 1 choice
> [   56.261135] usb 3-1: Successful Endpoint Configure command
> [   56.261249] usb 3-1: adding 3-1:1.0 (config #1, interface 0)
> [   56.261272] hub 3-1:1.0: usb_probe_interface
> [   56.261274] hub 3-1:1.0: usb_probe_interface - got id
> [   56.261276] hub 3-1:1.0: USB hub found
> [   56.261380] xhci_hcd 0000:02:00.0: WARN: short transfer on control ep
> [   56.261386] hub 3-1:1.0: 4 ports detected
> [   56.261387] hub 3-1:1.0: standalone hub
> [   56.261388] hub 3-1:1.0: individual port power switching
> [   56.261390] hub 3-1:1.0: individual port over-current protection
> [   56.261392] hub 3-1:1.0: Single TT
> [   56.261393] hub 3-1:1.0: TT requires at most 32 FS bit times (2664 ns)
> [   56.261395] hub 3-1:1.0: Port indicators are supported
> [   56.261396] hub 3-1:1.0: power on to power good time: 100ms
> [   56.261570] usb 3-1: Successful Endpoint Configure command
> [   56.261654] hub 3-1:1.0: local power source is good
> [   56.261657] hub 3-1:1.0: enabling power on all ports
> [   56.268105] hub 4-0:1.0: state 7 ports 2 chg 0000 evt 0002
> [   56.268118] hub 4-0:1.0: port 1, status 0203, change 0001, 5.0 Gb/s
> [   56.396035] hub 4-0:1.0: debounce: port 1: total 100ms stable 100ms status 
> 0x203
> [   58.363607] xhci_hcd 0000:02:00.0: WARN: transfer error on endpoint
> [   58.363617] hub 3-1:1.0: transfer --> -71

So the high speed portion of the hub has re-enumerated (although it does
get a transfer error for whatever reason), but the SuperSpeed portion of
the hub hasn't come back yet.

> crashes.....
> 
> 
> 
> 3. no more acceptable any sort of hub or devices
> 
> [   76.508031] xhci_hcd 0000:02:00.0: Timeout while waiting for a slot
> [   96.712031] xhci_hcd 0000:02:00.0: Timeout while waiting for a slot
> [   96.916028] usb 4-1: device not accepting address 4, error -62
> [  116.916025] xhci_hcd 0000:02:00.0: Timeout while waiting for a slot

I suspect the SuperSpeed portion of the hub isn't responding to the set
address control transfer, and the xHC never completes the Set Address
command.  There's a FIXME note in the driver in that code:

        /* FIXME: From section 4.3.4: "Software shall be responsible for timing
         * the SetAddress() "recovery interval" required by USB and aborting the
         * command on a timeout.
         */
        if (timeleft <= 0) {
                xhci_warn(xhci, "%s while waiting for a slot\n",
                                timeleft == 0 ? "Timeout" : "Signal");
                /* FIXME cancel the address device command */
                return -ETIME;
        }

So it's probably an xHCI driver bug.  I'll get you a patch to test next
week.

> [  116.916030] hub 4-0:1.0: couldn't allocate port 1 usb_device
> [  116.916095] hub 3-1:1.0: state 7 ports 4 chg 0000 evt 0000
> [  116.916101] hub 4-0:1.0: state 7 ports 2 chg 0000 evt 0002
> [  116.916111] hub 4-0:1.0: warm reset change on port 1
> [  116.916116] hub 4-0:1.0: port 1, status 02a0, change 0021, 5.0 Gb/s
> [  117.044033] hub 4-0:1.0: debounce: port 1: total 100ms stable 100ms status 
> 0x2a0
> [  117.044041] hub 3-0:1.0: state 7 ports 2 chg 0000 evt 0002
> [  117.060035] hub 3-0:1.0: resume on port 1, status 0
> [  117.060038] hub 3-0:1.0: port 1, status 0101, change 0005, 12 Mb/s
> [  117.060041] usb 3-1: USB disconnect, device number 4
> [  117.060043] usb 3-1: unregistering device
> [  117.060045] usb 3-1: unregistering interface 3-1:1.0
> [  117.060076] xhci_hcd 0000:02:00.0: shutdown urb f009bb80 ep1in-intr
> [  119.800046] hub 4-0:1.0: hub_suspend
> [  119.800061] usb usb4: bus auto-suspend
> 
> ########################################################################
> if i do plug/unplug slowly, everything is fine, 
> but if i do several times fast unplug/plug move, the hub gonna crash, 
> also host controller cannot work anymore, it happens easier when 
> hub has several devices attached
> 
> Thanks!!

Thanks for reporting this.

Sarah Sharp
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux