aboutsummaryrefslogtreecommitdiffstats
path: root/usb.current/usb-allow-drivers-to-use-allocated-bandwidth-until-unbound.patch
diff options
Diffstat (limited to 'usb.current/usb-allow-drivers-to-use-allocated-bandwidth-until-unbound.patch')
-rw-r--r--usb.current/usb-allow-drivers-to-use-allocated-bandwidth-until-unbound.patch91
1 files changed, 0 insertions, 91 deletions
diff --git a/usb.current/usb-allow-drivers-to-use-allocated-bandwidth-until-unbound.patch b/usb.current/usb-allow-drivers-to-use-allocated-bandwidth-until-unbound.patch
deleted file mode 100644
index 6930f5143cdf04..00000000000000
--- a/usb.current/usb-allow-drivers-to-use-allocated-bandwidth-until-unbound.patch
+++ /dev/null
@@ -1,91 +0,0 @@
-From linux-usb-owner@vger.kernel.org Wed Sep 1 13:02:44 2010
-From: Thadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
-To: linux-usb@vger.kernel.org
-Cc: linux-kernel@vger.kernel.org,
- Thadeu Lima de Souza Cascardo <cascardo@holoscopio.com>,
- Alan Stern <stern@rowland.harvard.edu>,
- Sarah Sharp <sarah.a.sharp@linux.intel.com>,
- Greg Kroah-Hartman <gregkh@suse.de>
-Subject: usb: allow drivers to use allocated bandwidth until unbound
-Date: Sat, 28 Aug 2010 03:06:29 -0300
-Message-Id: <1282975589-22324-1-git-send-email-cascardo@holoscopio.com>
-
-When using the remove sysfs file, the device configuration is set to -1
-(unconfigured). This eventually unbind drivers with the bandwidth_mutex
-held. Some drivers may call functions that hold said mutex, like
-usb_reset_device. This is the case for rtl8187, for example. This will
-lead to the same process holding the mutex twice, which deadlocks.
-
-Besides, according to Alan Stern:
-"The deadlock problem probably could be handled somehow, but there's a
-separate issue: Until the usb_disable_device call finishes unbinding
-the drivers, the drivers are free to continue using their allocated
-bandwidth. We musn't change the bandwidth allocations until after the
-unbinding is done. So this patch is indeed necessary."
-
-Unbinding the driver before holding the bandwidth_mutex solves the
-problem. If any operation after that fails, drivers are not bound again.
-But that would be a problem anyway that the user may solve resetting the
-device configuration to one that works, just like he would need to do in
-most other failure cases.
-
-Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
-Cc: Alan Stern <stern@rowland.harvard.edu>
-Cc: Sarah Sharp <sarah.a.sharp@linux.intel.com>
-Cc: stable <stable@kernel.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/usb/core/message.c | 22 +++++++++++-----------
- 1 file changed, 11 insertions(+), 11 deletions(-)
-
---- a/drivers/usb/core/message.c
-+++ b/drivers/usb/core/message.c
-@@ -1724,6 +1724,15 @@ free_interfaces:
- if (ret)
- goto free_interfaces;
-
-+ /* if it's already configured, clear out old state first.
-+ * getting rid of old interfaces means unbinding their drivers.
-+ */
-+ if (dev->state != USB_STATE_ADDRESS)
-+ usb_disable_device(dev, 1); /* Skip ep0 */
-+
-+ /* Get rid of pending async Set-Config requests for this device */
-+ cancel_async_set_config(dev);
-+
- /* Make sure we have bandwidth (and available HCD resources) for this
- * configuration. Remove endpoints from the schedule if we're dropping
- * this configuration to set configuration 0. After this point, the
-@@ -1733,20 +1742,11 @@ free_interfaces:
- mutex_lock(&hcd->bandwidth_mutex);
- ret = usb_hcd_alloc_bandwidth(dev, cp, NULL, NULL);
- if (ret < 0) {
-- usb_autosuspend_device(dev);
- mutex_unlock(&hcd->bandwidth_mutex);
-+ usb_autosuspend_device(dev);
- goto free_interfaces;
- }
-
-- /* if it's already configured, clear out old state first.
-- * getting rid of old interfaces means unbinding their drivers.
-- */
-- if (dev->state != USB_STATE_ADDRESS)
-- usb_disable_device(dev, 1); /* Skip ep0 */
--
-- /* Get rid of pending async Set-Config requests for this device */
-- cancel_async_set_config(dev);
--
- ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
- USB_REQ_SET_CONFIGURATION, 0, configuration, 0,
- NULL, 0, USB_CTRL_SET_TIMEOUT);
-@@ -1761,8 +1761,8 @@ free_interfaces:
- if (!cp) {
- usb_set_device_state(dev, USB_STATE_ADDRESS);
- usb_hcd_alloc_bandwidth(dev, NULL, NULL, NULL);
-- usb_autosuspend_device(dev);
- mutex_unlock(&hcd->bandwidth_mutex);
-+ usb_autosuspend_device(dev);
- goto free_interfaces;
- }
- mutex_unlock(&hcd->bandwidth_mutex);