lkml.org 
[lkml]   [2011]   [Nov]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[205/264] USB: Update last_busy time after autosuspend fails
    3.1-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Alan Stern <stern@rowland.harvard.edu>

    commit b2c0a863e14676fa5760c6d828fd373288e2f64a upstream.

    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@rowland.harvard.edu>
    Tested-by: Henrik Rydberg <rydberg@euromail.se>
    Acked-by: Greg Kroah-Hartman <gregkh@suse.de>
    Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    drivers/usb/core/driver.c | 5 +++++
    1 file changed, 5 insertions(+)

    --- a/drivers/usb/core/driver.c
    +++ b/drivers/usb/core/driver.c
    @@ -1668,6 +1668,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.
    */



    \
     
     \ /
      Last update: 2011-11-10 05:05    [W:4.350 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site