On Wed, 7 Sep 2016, Mathias Nyman wrote:

> > I'm still seeing occasional problems. For example, when I unplugged the 
> > dock last night, it seems to have wedged some things, and then plugging it 
> > back in didn't work. See some logs below.
> >
> >
> > I ran a show-blocked-tasks after plugging the dock back in:
> >
> 
> Looks like there is the usb_hub_wq that tries to handle the disconnect event
> at the same time as the pci remove code is removing xhci hosts (and connected 
> devices)
> 
> > Sep  7 09:03:30 fred kernel: [83879.383356] Workqueue: usb_hub_wq hub_event
> > Sep  7 09:03:30 fred kernel: [83879.383395] Call Trace:
> > Sep  7 09:03:30 fred kernel: [83879.383416]  [<ffffffff81855fa5>] 
> > schedule+0x35/0x80
> > Sep  7 09:03:30 fred kernel: [83879.383427]  [<ffffffff8163433d>] 
> > usb_kill_urb+0x8d/0xc0
> > Sep  7 09:03:30 fred kernel: [83879.383444]  [<ffffffff810c4490>] ? 
> > wake_atomic_t_function+0x60/0x60
> > Sep  7 09:03:30 fred kernel: [83879.383454]  [<ffffffff81633076>] 
> > usb_hcd_flush_endpoint+0x126/0x190
> > Sep  7 09:03:30 fred kernel: [83879.383465]  [<ffffffff81635fbb>] 
> > usb_disable_endpoint+0x9b/0xb0
> 
> 
> > Sep  7 09:03:30 fred kernel: [83879.383686] Workqueue: kacpi_hotplug 
> > acpi_hotplug_work_fn
> > Sep  7 09:03:30 fred kernel: [83879.383717] Call Trace:
> > Sep  7 09:03:30 fred kernel: [83879.383728]  [<ffffffff81855fa5>] 
> > schedule+0x35/0x80
> > Sep  7 09:03:30 fred kernel: [83879.383738]  [<ffffffff8185624e>] 
> > schedule_preempt_disabled+0xe/0x10
> > Sep  7 09:03:30 fred kernel: [83879.383748]  [<ffffffff81857ea9>] 
> > __mutex_lock_slowpath+0xb9/0x130
> > Sep  7 09:03:30 fred kernel: [83879.383758]  [<ffffffff81857f3f>] 
> > mutex_lock+0x1f/0x30
> > Sep  7 09:03:30 fred kernel: [83879.383766]  [<ffffffff8162b951>] 
> > usb_disconnect+0x51/0x280
> > Sep  7 09:03:30 fred kernel: [83879.383776]  [<ffffffff816314f0>] 
> > usb_remove_hcd+0xd0/0x240
> 
> First guess would be there is something wrong with killing the urb.
> usb_hub_wq takes the roothub device lock first, and then ends up waiting for 
> usb_kill_urb forever.

I agree.  Probably xhci-hcd is waiting for the controller to do 
something before it will give back the cancelled URB.  But since the 
controller has been removed, it never does anything.

> This would block the pci remove path when usb_remove_hcd calls 
> usb_disconnect, which
> tries to take the roothub lock as well.
> 
> Doing a usbfs read on a usb device also takes the roothub device lock, which 
> could explain
> why lsusb is blocked.
> 
> Just an idea, need to check the code in more detail to see if it's a possible 
> cause

ehci-hcd includes checks in several places for ehci->rh_state == 
RH_STATE_RUNNING.  The removal pathway sets ehci->rh_state to 
RH_STATE_HALTED.  As a result, the driver avoids waiting for things 
that will never happen.

Alan Stern

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to