Re: EHCI: port power regression when canceling suspend-to-disk

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

 



On Sat, 30 Mar 2013, Matthijs Kooijman wrote:

> Hi guys,
> 
> I recently noticed a problem with suspend-to-disk on my Thinkpad X201.
> I'm using swsusp, which offers a "press backspace to cancel" while it is
> writing out the suspend image to the swap partition. When I do this, the
> system mostly recovers, except for the USB ports on my docking station,
> which stop working (until I undock and redock again).
> 
> The USB ports on the laptop itself seem unaffected. During a normal
> suspend-resume (both to disk and to ram), the ports are also enabled
> properly.
> 
> I bisected this problem and it was introduced by the following commit:
> 
> 	commit c73cee717e7d5da0698acb720ad1219646fe4f46
> 	Author: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx>
> 	Date:   Wed Oct 31 13:21:06 2012 -0400
> 
> 	    USB: EHCI: remove ehci_port_power() routine
> 
> 	    This patch (as1623) removes the ehci_port_power() routine and all the
> 	    places that call it.  There's no reason for ehci-hcd to change the
> 	    port power settings; the hub driver takes care of all that stuff.
> 
> 	    There is one exception: When the controller is resumed from
> 	    hibernation or following a loss of power, the ports that are supposed
> 	    to be handed over to a companion controller must be powered on first.
> 	    Otherwise the handover won't work.  This process is not visible to the
> 	    hub driver, so it has to be handled in ehci-hcd.

Are you totally certain about this?  I can't see how removing code to 
change the EHCI port power would make any difference in your case, 
because the power was on the whole time.

> Perhaps there is some code path or set of ports that also need this exception?

Not that I can think of.  And even if there were, it wouldn't matter in 
this case because the power level wasn't changed.

> I tried reverting this patch on 3.9-rc4 and usb-next, but I got conflicts that
> I didn't try to resolve yet.

On your system, the only files in the patch that matter are ehci-hcd.c
and ehci-pci.c.  You could try reverting them alone.  Or even just the
ehci-hcd.c part, because the one-line change to ehci-pci.c gets used
only during probing, not during hibernation.

> I've attached the dmesg output from a kernel compiled from usb-next (571bb7a:
> Revert "USB: chipidea: add vbus detect for udc") with
> CONFIG_USB_DEBUG=y. I booted the kernel and immediately started a
> suspend-to-disk (around 50-51s). As soon as the image started being
> written to disk, I canceled it and the system resumed (at 52s). These
> messages look relevant:
> 
> [   52.899290] usb 1-1.4: link qh1-0e01/ffff880230cb97c0 start 0 [1/2 us]
> [   52.899345] hub 1-1:1.0: port 5 status 0000.0100 after resume, -19
> [   52.899347] usb 1-1.5: can't resume, status -19
> [   52.899348] hub 1-1:1.0: logical disconnect on port 5

Actually the relevant messages are earlier:

> [   52.798212] hub 1-1:1.0: hub_resume
> [   52.798214] hub 2-1:1.0: hub_resume
> [   52.798692] hub 1-1:1.0: port 4: status 0103 change 0000
> [   52.798819] hub 1-1:1.0: port 5: status 0100 change 0001
> [   52.799042] hub 1-1:1.0: port 6: status 0503 change 0000

The line for port 5 shows that even though power to the port is on, the
docking station's hub has disconnected itself.  By contrast, the
onboard webcam and bluetooth devices had no problem.

> Any idea how to fix this? Do you need any other info?

The only thing I can think of is that the 20-ms delay in the 
ehci_port_power() routine might have made a difference.  After 
reverting the patch, you could try removing everything in that function 
except the delay.

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



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

  Powered by Linux