Revert "usb: Reset USB-3 devices on USB-3 link bounce"
authorZhuang Jin Can <jin.can.zhuang@intel.com>
Mon, 26 Jan 2015 15:30:39 +0000 (23:30 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 3 Feb 2015 23:28:32 +0000 (15:28 -0800)
This revert a82b76f7fa6154e8ab2d8071842a3e38b9c0d0ff.

The commit causes an extra reset in remote wakeup as described in:
http://www.spinics.net/lists/linux-usb/msg119080.html

Signed-off-by: Zhuang Jin Can <jin.can.zhuang@intel.com>
Acked-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/core/hub.c

index 3e9c4d477d1accd2be9cdedc340619a6abc711fb..4c259aca7a62b01c939ee31e2bf4b1932443d879 100644 (file)
@@ -4886,7 +4886,7 @@ static void hub_port_connect_change(struct usb_hub *hub, int port1,
 static void port_event(struct usb_hub *hub, int port1)
                __must_hold(&port_dev->status_lock)
 {
-       int connect_change, reset_device = 0;
+       int connect_change;
        struct usb_port *port_dev = hub->ports[port1 - 1];
        struct usb_device *udev = port_dev->child;
        struct usb_device *hdev = hub->hdev;
@@ -4974,30 +4974,14 @@ static void port_event(struct usb_hub *hub, int port1)
                        if (hub_port_reset(hub, port1, NULL,
                                        HUB_BH_RESET_TIME, true) < 0)
                                hub_port_disable(hub, port1, 1);
-               } else
-                       reset_device = 1;
-       }
-
-       /*
-        * On disconnect USB3 protocol ports transit from U0 to
-        * SS.Inactive to Rx.Detect. If this happens a warm-
-        * reset is not needed, but a (re)connect may happen
-        * before hub_wq runs and sees the disconnect, and the
-        * device may be an unknown state.
-        *
-        * If the port went through SS.Inactive without hub_wq
-        * seeing it the C_LINK_STATE change flag will be set,
-        * and we reset the dev to put it in a known state.
-        */
-       if (reset_device || (udev && hub_is_superspeed(hub->hdev)
-                               && (portchange & USB_PORT_STAT_C_LINK_STATE)
-                               && (portstatus & USB_PORT_STAT_CONNECTION))) {
-               usb_unlock_port(port_dev);
-               usb_lock_device(udev);
-               usb_reset_device(udev);
-               usb_unlock_device(udev);
-               usb_lock_port(port_dev);
-               connect_change = 0;
+               } else {
+                       usb_unlock_port(port_dev);
+                       usb_lock_device(udev);
+                       usb_reset_device(udev);
+                       usb_unlock_device(udev);
+                       usb_lock_port(port_dev);
+                       connect_change = 0;
+               }
        }
 
        if (connect_change)
This page took 0.027108 seconds and 5 git commands to generate.