Re: [RFT] usbcore: Bug fix: system can't suspend with USB3.0 device

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

 



On Tue, Aug 30, 2011 at 04:39:08PM -0400, Don Zickus wrote:
> 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.

It would probably be polite of me to include a link to an archive. :-)

http://marc.info/?l=linux-usb&m=130262401114228&w=2


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


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

  Powered by Linux