• Rafael J. Wysocki's avatar
    PM: Fix potential issue with failing asynchronous suspend · 098dff73
    Rafael J. Wysocki authored
    There is a potential issue with the asynchronous suspend code that
    a device driver suspending asynchronously may not notice that it
    should back off.  There are two failing scenarions, (1) when the
    driver is waiting for a driver suspending synchronously to complete
    and that second driver returns error code, in which case async_error
    won't be set and the waiting driver will continue suspending and (2)
    after the driver has called device_pm_wait_for_dev() and the waited
    for driver returns error code, in which case the caller of
    device_pm_wait_for_dev() will not know that there was an error and
    will continue suspending.
    
    To fix this issue make __device_suspend() set async_error, so
    async_suspend() doesn't need to set it any more, and make
    device_pm_wait_for_dev() return async_error, so that its callers
    can check whether or not they should continue suspending.
    
    No more changes are necessary, since device_pm_wait_for_dev() is
    not used by any drivers' suspend routines.
    Reported-by: default avatarColin Cross <ccross@android.com>
    Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
    Acked-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    098dff73
main.c 26.5 KB