Hello. Considering that EM interference can last for a while (generally up to seconds), I am currently testing the following patch for module usbcore so that it is possible to specify an amount of time to wait before trying to re-enable a port that has been previously disabled by the hub (supposedly because of EM interference). Hopefully, setting the right positive value (for example, 2000 milliseconds) would help overcome situations such as the following: [ 1295.575679] usb 6-2: FTDI USB Serial Device converter now attached to ttyUSB1 [ 1302.204285] usb usb6-port2: disabled by hub (EMI?), re-enabling... *** NOTE: EMI is probably still present here *** [ 1303.205202] usb 6-2: USB disconnect, device number 6 [ 1303.205907] ftdi_sio ttyUSB1: FTDI USB Serial Device converter now disconnected from ttyUSB1 [ 1303.205950] ftdi_sio 6-2:1.0: device disconnected [ 1303.414089] usb 6-2: new full-speed USB device number 7 using uhci_hcd [ 1303.526226] usb 6-2: device descriptor read/64, error -71 [ 1303.894228] usb 6-2: new full-speed USB device number 8 using uhci_hcd [ 1304.006185] usb 6-2: device descriptor read/64, error -71 [ 1304.219089] usb 6-2: device descriptor read/64, error -71 [ 1304.422107] usb 6-2: new full-speed USB device number 9 using uhci_hcd [ 1304.640020] usb 6-2: device not accepting address 9, error -71 [ 1304.752024] usb 6-2: new full-speed USB device number 10 using uhci_hcd [ 1305.160020] usb 6-2: device not accepting address 10, error -71 [ 1305.160038] hub 6-0:1.0: unable to enumerate USB device on port 2 *** NOTE: Device is permanently disabled at this point *** I don't know whether my analysis is correct (and therefore the proposed solution appropriate), as reproducing the problem is very difficult... Regards, Guido Add an option to the usbcore module to wait a specified amount of time (in milliseconds) before trying to re-enable a USB port that has been previously disabled by the hub (possibly due to EMI). Signed-off-by: Guido Trentalancia <guido@xxxxxxxxxxxxxxxx> --- drivers/usb/core/hub.c | 8 ++++++++ 1 file changed, 8 insertions(+) --- linux-4.4.6-orig/drivers/usb/core/hub.c 2016-03-20 16:47:09.358674922 +0100 +++ linux-4.4.6/drivers/usb/core/hub.c 2016-03-20 16:47:51.960195139 +0100 @@ -89,6 +89,13 @@ MODULE_PARM_DESC(use_both_schemes, "try the other device initialization scheme if the " "first one fails"); +static int emi_recover_timer = 0; +module_param(emi_recover_timer, int, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(emi_recover_timer, + "wait before trying to re-enable a port " + "that has been disabled by the hub due to EMI " + "(default 0 milliseconds)"); + /* Mutual exclusion for EHCI CF initialization. This interferes with * port reset on some companion controllers. */ @@ -4960,6 +4967,7 @@ static void port_event(struct usb_hub *h if (!(portstatus & USB_PORT_STAT_ENABLE) && !connect_change && udev) { dev_err(&port_dev->dev, "disabled by hub (EMI?), re-enabling...\n"); + msleep(emi_recover_timer); connect_change = 1; } } -- 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