From: Sarah Sharp Date: Wed, 14 Nov 2012 23:58:52 +0000 (-0800) Subject: UPSTREAM: USB: Handle auto-transition from hot to warm reset. X-Git-Url: http://git.cascardo.eti.br/?a=commitdiff_plain;h=894c8238795416b2723375a65c922b6ce48f470b;p=cascardo%2Flinux.git UPSTREAM: USB: Handle auto-transition from hot to warm reset. commit 1c7439c61fa6516419c32a9824976334ea969d47 upstream. USB 3.0 hubs and roothubs will automatically transition a failed hot reset to a warm (BH) reset. In that case, the warm reset change bit will be set, and the link state change bit may also be set. Change hub_port_finish_reset to unconditionally clear those change bits for USB 3.0 hubs. If these bits are not cleared, we may lose port change events from the roothub. This commit should be backported to kernels as old as 3.2, that contain the commit 75d7cf72ab9fa01dc70877aa5c68e8ef477229dc "usbcore: refine warm reset logic". Signed-off-by: Sarah Sharp Acked-by: Alan Stern Signed-off-by: Greg Kroah-Hartman (cherry picked from commit 98e5587b9abe155e356d9eef3be6b1472c508c96) BUG=None TEST=Together with other cherry-picks: run BVT trybots on all platforms, manually confirm that USB network/storage/input devices still work (including across suspend/resume) Change-Id: I6ad1fa529a0e4a30a881dd2a07f4958f5947835c Signed-off-by: Julius Werner Reviewed-on: https://gerrit.chromium.org/gerrit/46066 Reviewed-by: Vincent Palatin --- diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index 79655ee8adf0..41ec20b56cff 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c @@ -2240,16 +2240,16 @@ static void hub_port_finish_reset(struct usb_hub *hub, int port1, clear_port_feature(hub->hdev, port1, USB_PORT_FEAT_C_RESET); /* FIXME need disconnect() for NOTATTACHED device */ - if (warm) { + if (hub_is_superspeed(hub->hdev)) { clear_port_feature(hub->hdev, port1, USB_PORT_FEAT_C_BH_PORT_RESET); clear_port_feature(hub->hdev, port1, USB_PORT_FEAT_C_PORT_LINK_STATE); - } else { + } + if (!warm) usb_set_device_state(udev, *status ? USB_STATE_NOTATTACHED : USB_STATE_DEFAULT); - } break; } }