Patchwork [3.5.yuz,extended,stable] Patch "USB: Enable LPM after a failed probe." has been added to staging queue

mail settings
Submitter Herton Ronaldo Krzesinski
Date Nov. 21, 2012, 5:08 a.m.
Message ID <>
Download mbox | patch
Permalink /patch/200553/
State New
Headers show


Herton Ronaldo Krzesinski - Nov. 21, 2012, 5:08 a.m.
This is a note to let you know that I have just added a patch titled

    USB: Enable LPM after a failed probe.

to the linux-3.5.y-queue branch of the 3.5.yuz extended stable tree 
which can be found at:;a=shortlog;h=refs/heads/linux-3.5.y-queue

If you, or anyone else, feels it should not be added to this tree, please 
reply to this email.

For more information about the 3.5.yuz tree, see



From b4a1fc226724e17594b7bc855ff415d8db3e0d83 Mon Sep 17 00:00:00 2001
From: Sarah Sharp <>
Date: Thu, 4 Oct 2012 09:53:43 -0700
Subject: [PATCH] USB: Enable LPM after a failed probe.

commit d01f87c0ffa96cb44faa78710711eb6e974b891c upstream.

Before a driver is probed, we want to disable USB 3.0 Link Power
Management (LPM), in case the driver needs hub-initiated LPM disabled.
After the probe finishes, we want to attempt to re-enable LPM, order to
balance the LPM ref count.

When a probe fails (such as when libusual doesn't want to bind to a USB
3.0 mass storage device), make sure to balance the LPM ref counts by
re-enabling LPM.

This patch should be backported to kernels as old as 3.5, that contain
the commit 8306095fd2c1100e8244c09bf560f97aca5a311d "USB: Disable USB
3.0 LPM in critical sections."

Signed-off-by: Sarah Sharp <>
Signed-off-by: Herton Ronaldo Krzesinski <>
 drivers/usb/core/driver.c |    4 ++++
 1 file changed, 4 insertions(+)



diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
index f536aeb..da33079 100644
--- a/drivers/usb/core/driver.c
+++ b/drivers/usb/core/driver.c
@@ -371,6 +371,10 @@  static int usb_probe_interface(struct device *dev)
 	intf->condition = USB_INTERFACE_UNBOUND;

+	/* If the LPM disable succeeded, balance the ref counts. */
+	if (!lpm_disable_error)
+		usb_unlocked_enable_lpm(udev);
 	/* Unbound interfaces are always runtime-PM-disabled and -suspended */
 	if (driver->supports_autosuspend)