Dan Williams <dcbw@xxxxxxxxxx> writes: > As part of the initialization sequence, the driver sends a SYNC message > via the control pipe to the firmware, which appears to request a > firmware restart. The firmware responds with an indication via the > interrupt pipe set up by usbnet. If the driver does not receive a > RESTART indication within a certain amount of time, it will periodically > send additional SYNC messages until it receives the RESTART indication. > > Unfortunately, the interrupt URB is only submitted while the netdev > is open, which is usually not the case during initialization, and thus > the firmware's RESTART indication is lost. So the driver continues > sending SYNC messages, and eventually the firmware crashes when it > receives too many. This leads to a wedged netdev. > > To ensure the firmware's RESTART indications can be received by the > driver, request that usbnet keep the interrupt URB active via > FLAG_INTR_ALWAYS. > > Second, move the code that sends the SYNC message out of the > bind() hook and after usbnet_probe() to ensure the interrupt URB > is set up before trying to use it. Given this description I am wondering if you couldn't just move the whole SYNC thing to a new reset() hook, using some private flag to make sure it only runs once? Does it really need to start at probe time? Bjørn -- 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