Re: modprobe -r hangs XHCI and panics on dwc3-omap

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

 



On Wed, 3 Sep 2014, Felipe Balbi wrote:

> Hi,
> 
> I've been tracking down two issues and one of them seems to be a problem
> with either usbcore or xhci.
> 
> DWC3, when acting as host, instantiates an xhci platform-device and sets
> itself as the parent of that. That's all fine and dandy until I try to
> modprobe -r dwc3.ko which causes XHCI to hang:

> | # modprobe -r dwc3
> | [   53.016798] xhci-hcd xhci-hcd.0.auto: remove, state 4
> | [   53.023083] usb usb2: USB disconnect, device number 1
> | [   53.082845] xhci-hcd xhci-hcd.0.auto: Host not halted after 16000 microseconds.
> | [   53.090732] xhci-hcd xhci-hcd.0.auto: USB bus 2 deregistered
> | [   53.112511] xhci-hcd xhci-hcd.0.auto: remove, state 1
> | [   53.117883] usb usb1: USB disconnect, device number 1
> | [   53.123301] usb 1-1: USB disconnect, device number 2
> | [   53.128503] usb 1-1.6: USB disconnect, device number 3
> | [   90.539781] INFO: task modprobe:1792 blocked for more than 30 seconds.
> | [   90.546607]       Not tainted 3.17.0-rc2-00004-ge0b64425 #800
> | [   90.552672] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
> | [   90.560855] modprobe        D c06bf5a0     0  1792   1662 0x00000000
> | [   90.567541] [<c06bf5a0>] (__schedule) from [<c06bfa94>] (schedule+0x40/0x8c)
> | [   90.574925] [<c06bfa94>] (schedule) from [<c06c3e48>] (schedule_timeout+0x154/0x220)
> | [   90.583031] [<c06c3e48>] (schedule_timeout) from [<c06c0554>] (wait_for_common+0xdc/0x178)
> | [   90.591672] [<c06c0554>] (wait_for_common) from [<c06c0610>] (wait_for_completion+0x20/0x24)
> | [   90.600537] [<c06c0610>] (wait_for_completion) from [<bf0569d4>] (xhci_configure_endpoint+0xc8/0x590 [xhci_hcd])
> | [   90.611226] [<bf0569d4>] (xhci_configure_endpoint [xhci_hcd]) from [<bf057664>] (xhci_check_bandwidth+0x16c/0x294 [xhci_hcd])

It sounds like unloading dwc3 breaks the communication with the
controller before it has been unbound from xhci.  This is probably
caused by dwc3's removal routine doing something in the wrong order.

> This only happens when I have devices attached to the XHCI port on my
> platform (AM437x, but I suppose any XHCI would die similarly if you can
> destroy the underlying {platform,pci}_device.

It looks like dwc3/host.c:dwc3_host_exit() simply calls
platform_device_unregister().  That ought to work okay.

On the other hand, core.c:dwc3_remove() doesn't call 
dwc3_core_exit_mode() until after doing a lot of other things.  
Shouldn't it call dwc3_core_exit_mode() first?

Alan Stern

--
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