| From: Maxim Moseychuk <franchesko.salias.hudro.pedros@gmail.com> |
| Date: Thu, 4 Jan 2018 21:43:03 +0300 |
| Subject: usb: do not reset if a low-speed or full-speed device timed out |
| |
| commit 6e01827ed93947895680fbdad68c072a0f4e2450 upstream. |
| |
| Some low-speed and full-speed devices (for example, bluetooth) |
| do not have time to initialize. For them, ETIMEDOUT is a valid error. |
| We need to give them another try. Otherwise, they will |
| never be initialized correctly and in dmesg will be messages |
| "Bluetooth: hci0 command 0x1002 tx timeout" or similars. |
| |
| Fixes: 264904ccc33c ("usb: retry reset if a device times out") |
| Signed-off-by: Maxim Moseychuk <franchesko.salias.hudro.pedros@gmail.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| drivers/usb/core/hub.c | 4 +++- |
| 1 file changed, 3 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/usb/core/hub.c |
| +++ b/drivers/usb/core/hub.c |
| @@ -4381,7 +4381,9 @@ hub_port_init (struct usb_hub *hub, stru |
| * reset. But only on the first attempt, |
| * lest we get into a time out/reset loop |
| */ |
| - if (r == 0 || (r == -ETIMEDOUT && retries == 0)) |
| + if (r == 0 || (r == -ETIMEDOUT && |
| + retries == 0 && |
| + udev->speed > USB_SPEED_FULL)) |
| break; |
| } |
| udev->descriptor.bMaxPacketSize0 = |