On Thursday, November 03, 2011, Alan Stern wrote: > Originally, the runtime PM core would send an idle notification > whenever a suspend attempt failed. The idle callback routine could > then schedule a delayed suspend for some time later. > > However this behavior was changed by commit > f71648d73c1650b8b4aceb3856bebbde6daa3b86 (PM / Runtime: Remove idle > notification after failing suspend). No notifications were sent, and > there was no clear mechanism to retry failed suspends. > > This caused problems for the usbhid driver, because it fails > autosuspend attempts as long as a key is being held down. A companion > patch changes the PM core's behavior, but we also need to change the > USB core. In particular, this patch (as1493) updates the device's > last_busy time when an autosuspend fails, so that the PM core will > retry the autosuspend in the future when the delay time expires > again. > > Signed-off-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> > Tested-by: Henrik Rydberg <rydberg@xxxxxxxxxxx> > CC: <stable@xxxxxxxxxx> Greg, are you going to take this one or do you want me to do that? Rafael > --- > > drivers/usb/core/driver.c | 5 +++++ > 1 file changed, 5 insertions(+) > > Index: usb-3.1/drivers/usb/core/driver.c > =================================================================== > --- usb-3.1.orig/drivers/usb/core/driver.c > +++ usb-3.1/drivers/usb/core/driver.c > @@ -1667,6 +1667,11 @@ int usb_runtime_suspend(struct device *d > return -EAGAIN; > > status = usb_suspend_both(udev, PMSG_AUTO_SUSPEND); > + > + /* Allow a retry if autosuspend failed temporarily */ > + if (status == -EAGAIN || status == -EBUSY) > + usb_mark_last_busy(udev); > + > /* The PM core reacts badly unless the return code is 0, > * -EAGAIN, or -EBUSY, so always return -EBUSY on an error. > */ > > > -- 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