Add linux-usb in loop.
Hello,
When reload the xhci_hcd.ko continuously as following, we will see
many error messages, even HW hang! (almost < 300 times;
if no sleep between rmmod and modprobe driver, the value should be smaller).
#> rmmod xhci_hcd; modprobe xhci_hcd
By the way, our kernel version is 2.6.32.358 (v3.15-rc2 also tested,
similar situation), and the machine’s PCH is Intel Lynx-Point.
After tracing the source code, we found:
In kernel source:
linux-2.6.32-358.el6.x86_64/drivers/usb/host/xhci.c
54 int handshake(struct xhci_hcd *xhci, void __iomem *ptr,
55 u32 mask, u32 done, int usec)
56 {
57 u32 result;
58
59 do {
60 result = xhci_readl(xhci, ptr);
61 if (result == ~(u32)0) /* card removed */
62 return -ENODEV;
63 result &= mask;
64 if (result == done)
65 return 0;
66 udelay(10); //udelay(1);
67 usec -= 10; //usec--;
68 } while (usec > 0);
69 return -ETIMEDOUT;
70 }
In this function, it will be called for some USB commands to issue
out, and trying to read HW register until it matching “done” value,
At Lynx-Point, we wonder this will make HW unstable because of
frequently access, so we reduce the access rate,
Old: udelay(1) & usec --
New: udelay(10) & usec -= 10
= = > After patch,
Reload xhci_hcd driver for 1000 times, no problem, so the patch fix
the problem for us.
Look forward to your response. Thanks!
Best Regards,
Lin Du
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html