From: Jim Wylder Date: Wed, 7 Sep 2011 02:07:20 +0000 (-0500) Subject: USB: for usb_autopm_get_interface_async -EINPROGRESS is not an error X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=c5a48592d874ddef8c7880311581eccf0eb30c3b;p=openwrt%2Fstaging%2Fblogic.git USB: for usb_autopm_get_interface_async -EINPROGRESS is not an error A return value of -EINPROGRESS from pm_runtime_get indicates that the device is already resuming due to a previous call. Internally, usb_autopm_get_interface_async doesn't treat this as an error and increments the usage count, but passes the error status along to the caller. The logical assumption of the caller is that any negative return value reflects the device not resuming and the pm_usage_cnt not being incremented. Since the usage count is being incremented and the device is resuming, return success (0) instead. Signed-off-by: James Wylder Acked-by: Alan Stern Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c index 34e3da5aa72a..14b83f2a4e87 100644 --- a/drivers/usb/core/driver.c +++ b/drivers/usb/core/driver.c @@ -1583,7 +1583,7 @@ int usb_autopm_get_interface_async(struct usb_interface *intf) dev_vdbg(&intf->dev, "%s: cnt %d -> %d\n", __func__, atomic_read(&intf->dev.power.usage_count), status); - if (status > 0) + if (status > 0 || status == -EINPROGRESS) status = 0; return status; }