On Wed, Feb 10, 2016 at 11:33:18AM +0100, Oliver Neukum wrote: > Some devices I got show an inability to operate right after > power on if they are already connected. They are beyond recovery > if the descriptors are requested multiple times. So in case of > a timeout we rather bail early and reset again. But it must be > done only on the first loop lest we get into a reset/time out > spiral that can be overcome with a retry. > > This patch is a rework of a patch that fell through the cracks. > http://www.spinics.net/lists/linux-usb/msg103263.html > > Signed-off-by: Oliver Neukum <oneukum@xxxxxxxx> > CC: stable@xxxxxxxxxxxxxxx > --- > drivers/usb/core/hub.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c > index f912fe6..e4e46f6 100644 > --- a/drivers/usb/core/hub.c > +++ b/drivers/usb/core/hub.c > @@ -4496,7 +4496,13 @@ hub_port_init(struct usb_hub *hub, struct usb_device *udev, int port1, > r = -EPROTO; > break; > } > - if (r == 0) > + /* > + * Some devices time out if they are powered on > + * when already connected. They need a second > + * reset. But only on the first attempt, > + * lest we get into a time out/reset loop > + */ > + if (r == 0 || (r == -ETIMEDOUT && j == 0)) > break; > } > udev->descriptor.bMaxPacketSize0 = > -- > 2.1.4 > I remembered you agreed with using outer loop counter (i) as the quit condition. -- Best Regards, Peter Chen -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html