Hi Nicco/ TC,

as we chatted few days ago on #openmandriva-cooker channel, I've ported the 
patch made by Sarah Sharper (over 3.10.x family)
to our last kernel version. For those who lost the discussion, this spins 
around a misintepretation of USB2.0 spec, whereas
this tell us O.S. should await a MINIMUM of 10msec it was implemented as a 
MAXIMUM of 10msec which causes a timeout on some
slower USB devices, consquently disconnecting its USB hub from system. If you 
have any doubt please refer to:

http://marc.info/?l=linux-usb&m=137714769606183&w=2 -> official patch sent to 
kernel-ml;
https://plus.google.com/u/0/116960357493251979546/posts/RZpndv4BCCD -> Sarah 
Sharper (usbcore mantainer) explanation o her g+ account;

--- linux-3.13.9/drivers/usb/core/hub.c 2014-04-03 16:02:51.000000000 -0300
+++ linux-3.13.9-devel/drivers/usb/core/hub.c   2014-04-04 10:50:50.069306549 
-0300
@@ -43,6 +43,8 @@
 #define USB_VENDOR_GENESYS_LOGIC               0x05e3
 #define HUB_QUIRK_CHECK_PORT_AUTOSUSPEND       0x01
 
+#define TRSMRCY                                        20
+
 static inline int hub_is_superspeed(struct usb_device *hdev)
 {
        return (hdev->descriptor.bDeviceProtocol == USB_HUB_PR_SS);
@@ -3216,8 +3218,11 @@
                 */
                status = hub_port_status(hub, port1, &portstatus, &portchange);
 
-               /* TRSMRCY = 10 msec */
-               msleep(10);
+               /*
+                * benatto: this avoid slower USB devices to timeout when
+                * resume from suspend. 20 seconds put os on safe side
+                */ 
+               msleep(TRSMRCY);
        }
 
  SuspendCleared:
@@ -4601,8 +4606,7 @@
        }
 
        if (udev) {
-               /* TRSMRCY = 10 msec */
-               msleep(10);
+               msleep(TRSMRCY);
 
                usb_lock_device(udev);
                ret = usb_remote_wakeup(udev);


Is there any objection to this patch? Whether not, Nicco could you apply it?

Cheers mates!

Marco A Benatto
Mandriva OEM Team

Reply via email to