On Mon, 25 Feb 2013, Tony Camuso wrote: > On 02/21/2013 05:04 PM, Alan Stern wrote: > > > > Would it be simpler to delete the timer in xhci_bus_suspend() and > > restart it in xhci_bus_resume()? Then you wouldn't need to care > > about the difference between suspend and hibernation. > > > > Alan, > > I tried implementing this. There were some static functions in > xhci.c that had to be exposed so they could be called by > xhci_bus_suspend and xhci_bus_resume. > > Besides that, xchi_bus_suspend/resume are called a number of times > during boot. I don't know why this is, but you may be able to shed > some light on that. Probably because the buses are registered at boot but there aren't any devices plugged in. (Or maybe there are devices, but the system is too busy doing other things during boot to detect them for a while.) Since the buses are idle, they get suspended. > Furthermore, xhci_bus_suspend is called before > xhci_bus_resume, so an attempt is made to delete the compliance > mode recovery timer, which does not yet exist. This produces a > list_add corruption call trace a number of times during boot. That doesn't make sense. The timer must be added somewhere other than in xhci_bus_resume; otherwise it would never get activated in the current xhci-hcd. Wherever that other place is, it should still be in operation. 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