| From c5a48592d874ddef8c7880311581eccf0eb30c3b Mon Sep 17 00:00:00 2001 |
| From: Jim Wylder <jwylder1@motorola.com> |
| Date: Tue, 6 Sep 2011 21:07:20 -0500 |
| Subject: USB: for usb_autopm_get_interface_async -EINPROGRESS is not an error |
| |
| From: Jim Wylder <jwylder1@motorola.com> |
| |
| commit c5a48592d874ddef8c7880311581eccf0eb30c3b upstream. |
| |
| 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 <james.wylder@motorola.com> |
| Acked-by: Alan Stern <stern@rowland.harvard.edu> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/usb/core/driver.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/usb/core/driver.c |
| +++ b/drivers/usb/core/driver.c |
| @@ -1583,7 +1583,7 @@ int usb_autopm_get_interface_async(struc |
| 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; |
| } |