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

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

 



Hi,

On Wed, Sep 03, 2014 at 04:41:34PM -0400, Alan Stern wrote:
> 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.

HAH! I guess you just found the issue for me :-) We're killing the PHYs
as the first step, before even trying to unregister XHCI's
platform_device.

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

yup. At least the PHYs still need to the be alive for as long as XHCI is
:-)

Let me try that out. There's nothing an extra set of eyes :-)

-- 
balbi

Attachment: signature.asc
Description: Digital signature


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

  Powered by Linux