If one usb interface driver returns failure from its suspend(auto) callback inside usb_suspend_both, its resume() callback should be called to recover its working state.
Unfortunately, usbcore missed it, so fix the bug by decreasing the iterator variable to cover the current failed interface. Cc: sta...@vger.kernel.org Signed-off-by: Ming Lei <ming....@canonical.com> --- drivers/usb/core/driver.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c index ddd820d..c228c9c 100644 --- a/drivers/usb/core/driver.c +++ b/drivers/usb/core/driver.c @@ -1250,8 +1250,10 @@ static int usb_suspend_both(struct usb_device *udev, pm_message_t msg) /* Ignore errors during system sleep transitions */ if (!PMSG_IS_AUTO(msg)) status = 0; - if (status != 0) + if (status != 0) { + i--; break; + } } } if (status == 0) { -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html