Re: [RFC][PATCH 1/3] usb: add a hcd notify entry in hc_driver
From: Alan Stern
Date: Tue May 05 2015 - 13:23:19 EST
On Tue, 5 May 2015, Lu, Baolu wrote:
> The order that software should do during device suspend/resume is
> defined in 4.15.1.1 of xHCI spec 1.1.
>
> Spec 4.15.1.1:
>
> Software shall stop all endpoints of a device using the Stop Endpoint
> Command and setting the Suspend
> (SP) flag to 1 prior to selectively suspending a device.
But _after_ all the URBs sent to the device have completed, right?
> After the
> device is resumed software shall ring an
> endpoints doorbell to restart it.
The driver would ring the endpoint's doorbell anyway when a new URB is
submitted, wouldn't it? Which means the resume callback doesn't
actually have to do anything.
> --end--
>
> So the order looks like:
>
> tell hcd device suspend
> usb_port_suspend()
You have forgotten that usb_port_suspend() can send URBs to the device
(to enable remote wakeup, for example). Therefore you shouldn't notify
the HCD until usb_port_suspend() is partly or totally finished.
> usb_port_resume()
> tell hcd device resume
You have also forgotten that usb_port_resume() calls various functions
that send URBs to ep0 on the device. Therefore if the HCD's
device_resume callback needs to do something (like ringing ep0's
doorbell), you had better invoke the callback _before_ calling
usb_port_resume(). Or maybe you had better do this _within_
usb_port_resume().
Alan Stern
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/