On 05/16/2012 10:30 PM, Alan Stern wrote:
This gives me an idea for what the problem might be. Basically, ehci-hcd does not do a good job of unlinking interrupt transfers. In drivers/usb/host/ehci-sched.c:intr_deschedule(), you'll find this code: if (list_empty (&qh->qtd_list) || (cpu_to_hc32(ehci, QH_CMASK) & hw->hw_info2) != 0) wait = 2; else wait = 55; /* worst case: 3 * 1024 */ udelay (wait); I suspect the values for "wait" are much too small. The EHCI specification doesn't really say what they should be. Try replacing the entire code snippet above with udelay(1000); and see if that makes any difference.
This looks very promising indeed. I've inserted the second patch of Huan Li (not the one which killed the kernel) and your modification and have a stable run for more then 8 hours. I assume the modified udelay is not supposed to be a permanent fix for a production kernel. So how do we proceed ? Thank you O. -- 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