mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-17 18:36:00 +00:00
USB: core: Tolerate protocol stall during hub and port status read
Protocol stall should not be fatal while reading port or hub status as it is transient state. Currently hub EP0 STALL during port status read results in failed device enumeration. This has been observed with ST-Ericsson (formerly Philips) USB 2.0 Hub (04cc:1521) after connecting keyboard. Signed-off-by: Libor Pechacek <lpechacek@suse.cz> Acked-by: Alan Stern <stern@rowland.harvard.edu> Cc: stable <stable@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
9303961f5b
commit
3824c1ddaf
@ -339,7 +339,8 @@ static int get_hub_status(struct usb_device *hdev,
|
||||
{
|
||||
int i, status = -ETIMEDOUT;
|
||||
|
||||
for (i = 0; i < USB_STS_RETRIES && status == -ETIMEDOUT; i++) {
|
||||
for (i = 0; i < USB_STS_RETRIES &&
|
||||
(status == -ETIMEDOUT || status == -EPIPE); i++) {
|
||||
status = usb_control_msg(hdev, usb_rcvctrlpipe(hdev, 0),
|
||||
USB_REQ_GET_STATUS, USB_DIR_IN | USB_RT_HUB, 0, 0,
|
||||
data, sizeof(*data), USB_STS_TIMEOUT);
|
||||
@ -355,7 +356,8 @@ static int get_port_status(struct usb_device *hdev, int port1,
|
||||
{
|
||||
int i, status = -ETIMEDOUT;
|
||||
|
||||
for (i = 0; i < USB_STS_RETRIES && status == -ETIMEDOUT; i++) {
|
||||
for (i = 0; i < USB_STS_RETRIES &&
|
||||
(status == -ETIMEDOUT || status == -EPIPE); i++) {
|
||||
status = usb_control_msg(hdev, usb_rcvctrlpipe(hdev, 0),
|
||||
USB_REQ_GET_STATUS, USB_DIR_IN | USB_RT_PORT, 0, port1,
|
||||
data, sizeof(*data), USB_STS_TIMEOUT);
|
||||
|
Loading…
x
Reference in New Issue
Block a user