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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to