Hi Alan, I am trying to dig up an old thread and see what happened to the patch. I don't have it archived, so I apologize if it doesn't thread correctly. Cheers, Don On Mon, 11 Apr 2011, Sarah Sharp wrote: > On Sun, Apr 10, 2011 at 08:52:13PM -0400, CAI Qian wrote: > > Hi Sarah, > > > > The following was output from the serial console during the second > > hibernate/resume. Does it help? > > > > # echo disk >/sys/power/state > > PM: Syncing filesystems ... done. > > Freezing user space processes ... Apr 10 20:46:36 ibm-x3550m3-03 kernel: PM: Syncing filesystems ... done. > > (elapsed 0.01 seconds) done. > > Freezing remaining freezable tasks ... (elapsed 0.01 seconds) done. > > PM: Preallocating image memory... done (allocated 313188 pages) > > PM: Allocated 1252752 kbytes in 0.60 seconds (2087.92 MB/s) > > hub 9-1:1.0: suspend error -16 > > I think Alan said that usb9 or hub 9-0 would be the roothub, so hub 9-1 is > most likely your VIA hub. The xHCI host was showing up as bus 8 before, > according to your lsusb output, so on 2.6.39-rc2, the xHCI USB 2.0 > roothub would still be bus8, and the xHCI USB 3.0 roothub would be bus9. > So the device that is failing is probably the USB 3.0 portion of your > VIA hub. Specifically the interface driver is refusing to suspend. > > > pm_op(): usb_dev_freeze+0x0/0x20 returns -16 > > usb_dev_freeze() attempts to suspend the USB device, eventually calling > into khubd's suspend method, hub_suspend(). That looks at all the > children of the hub, making sure that udev->can_submit isn't set for > each valid usb_device. That will return -EBUSY (-16) if a device is > active. This resembles a problem reported by Dirk Hohndel back around the time of LinuxConf-Australia. There was no follow-up and the proposed patch was never submitted. I have included it below so that it can be tested. The idea is that when a device is marked as disconnected, the can_submit flag doesn't get set to 0. Therefore the test in hub_suspend() fails, when it ought to succeed. Since that test hasn't found any serious problems in a long time, the easiest solution was to remove it. Alan Stern Index: usb-2.6/drivers/usb/core/hub.c =================================================================== --- usb-2.6.orig/drivers/usb/core/hub.c +++ usb-2.6/drivers/usb/core/hub.c @@ -2478,21 +2478,6 @@ int usb_port_resume(struct usb_device *u static int hub_suspend(struct usb_interface *intf, pm_message_t msg) { struct usb_hub *hub = usb_get_intfdata (intf); - struct usb_device *hdev = hub->hdev; - unsigned port1; - - /* fail if children aren't already suspended */ - for (port1 = 1; port1 <= hdev->maxchild; port1++) { - struct usb_device *udev; - - udev = hdev->children [port1-1]; - if (udev && udev->can_submit) { - if (!(msg.event & PM_EVENT_AUTO)) - dev_dbg(&intf->dev, "port %d nyet suspended\n", - port1); - return -EBUSY; - } - } dev_dbg(&intf->dev, "%s\n", __func__); -- 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 -- 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