Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1711753

[PATCH 3.18 10/16] USB: Check for dropped connection before switching to full speed

From Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Newsgroups linux.kernel
Subject [PATCH 3.18 10/16] USB: Check for dropped connection before switching to full speed
Date 2017-08-15 04:00 +0200
Message-ID <uezje-3jP-59@gated-at.bofh.it> (permalink)
References <ueyGu-35K-19@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


3.18-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Alan Stern <stern@rowland.harvard.edu>

commit 94c43b9897abf4ea366ed4dba027494e080c7050 upstream.

Some buggy USB disk adapters disconnect and reconnect multiple times
during the enumeration procedure.  This may lead to a device
connecting at full speed instead of high speed, because when the USB
stack sees that a device isn't able to enumerate at high speed, it
tries to hand the connection over to a full-speed companion
controller.

The logic for doing this is careful to check that the device is still
connected.  But this check is inadequate if the device disconnects and
reconnects before the check is done.  The symptom is that a device
works, but much more slowly than it is capable of operating.

The situation was made worse recently by commit 22547c4cc4fe ("usb:
hub: Wait for connection to be reestablished after port reset"), which
increases the delay following a reset before a disconnect is
recognized, thus giving the device more time to reconnect.

This patch makes the check more robust.  If the device was
disconnected at any time during enumeration, we will now skip the
full-speed handover.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Reported-and-tested-by: Zdenek Kabelac <zkabelac@redhat.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/usb/core/hub.c |   10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -4623,7 +4623,8 @@ hub_power_remaining (struct usb_hub *hub
 static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus,
 		u16 portchange)
 {
-	int status, i;
+	int status = -ENODEV;
+	int i;
 	unsigned unit_load;
 	struct usb_device *hdev = hub->hdev;
 	struct usb_hcd *hcd = bus_to_hcd(hdev->bus);
@@ -4823,9 +4824,10 @@ loop:
 
 done:
 	hub_port_disable(hub, port1, 1);
-	if (hcd->driver->relinquish_port && !hub->hdev->parent)
-		hcd->driver->relinquish_port(hcd, port1);
-
+	if (hcd->driver->relinquish_port && !hub->hdev->parent) {
+		if (status != -ENOTCONN && status != -ENODEV)
+			hcd->driver->relinquish_port(hcd, port1);
+	}
 }
 
 /* Handle physical or logical connection change events.

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 3.18 00/16] 3.18.66-stable review Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-08-15 03:20 +0200
  [PATCH 3.18 01/16] mm: ratelimit PFNs busy info message Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-08-15 03:20 +0200
  [PATCH 3.18 11/16] usb: quirks: Add no-lpm quirk for Moshi USB to Ethernet Adapter Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-08-15 04:00 +0200
  [PATCH 3.18 06/16] USB: hcd: Mark secondary HCD as dead if the primary one died Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-08-15 04:00 +0200
  [PATCH 3.18 08/16] iio: light: tsl2563: use correct event code Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-08-15 04:00 +0200
  [PATCH 3.18 05/16] usb: musb: fix tx fifo flush handling again Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-08-15 04:00 +0200
  [PATCH 3.18 14/16] pnfs/blocklayout: require 64-bit sector_t Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-08-15 04:00 +0200
  [PATCH 3.18 03/16] USB: serial: option: add D-Link DWM-222 device ID Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-08-15 04:00 +0200
  [PATCH 3.18 07/16] staging:iio:resolver:ad2s1210 fix negative IIO_ANGL_VEL read Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-08-15 04:00 +0200
  [PATCH 3.18 15/16] pinctrl: sunxi: add a missing function of A10/A20 pinctrl driver Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-08-15 04:00 +0200
  [PATCH 3.18 10/16] USB: Check for dropped connection before switching to full speed Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-08-15 04:00 +0200
  [PATCH 3.18 04/16] USB: serial: cp210x: add support for Qivicon USB ZigBee dongle Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-08-15 04:00 +0200
  [PATCH 3.18 16/16] pinctrl: samsung: Remove bogus irq_[un]mask from resource management Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-08-15 04:00 +0200
  [PATCH 3.18 12/16] usb:xhci:Add quirk for Certain failing HP keyboard on reset after resume Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-08-15 04:10 +0200
  [PATCH 3.18 02/16] fuse: initialize the flock flag in fuse_file on allocation Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-08-15 04:10 +0200
  [PATCH 3.18 13/16] iio: adc: vf610_adc: Fix VALT selection value for REFSEL bits Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-08-15 04:10 +0200
  Re: [PATCH 3.18 00/16] 3.18.66-stable review Guenter Roeck <linux@roeck-us.net> - 2017-08-15 12:50 +0200
  Re: [PATCH 3.18 00/16] 3.18.66-stable review Shuah Khan <shuahkh@osg.samsung.com> - 2017-08-15 20:10 +0200

csiph-web