On Fri, 14 Feb 2014, Dennis New wrote: > > Hmmm. Looking again at the data you collected, it appears that those > > quirks are not going to help. _Something_ has gone wrong, but it's > > hard to tell what. At first I thought maybe the OHCI controller had > > simply stopped generating interrupt requests, but that doesn't seem to > > agree with the debugging output. > > > > I'll have to write a diagnostic patch to get more information. > > Unfortunately the next few days are going to be pretty busy, so I > > won't be able to get to it for a while. > > Btw, the bug "feels" like it happens more often (although not always) > when my CPU is doing something intensive, or when I alt-tab to another > window, or use my wifi heavily, or some such interrupt-y type event. It's hard to know whether that is significant. Anyway, I finally got around to writing a diagnostic patch for you to try. This should be applied with no other patches present. It requires CONFIG_USB_DEBUG to be enabled, and it should add a fair amount of debugging information to the dmesg log when your problem occurs. Let's see what shows up. Alan Stern Index: usb-3.14/drivers/usb/host/ohci-hcd.c =================================================================== --- usb-3.14.orig/drivers/usb/host/ohci-hcd.c +++ usb-3.14/drivers/usb/host/ohci-hcd.c @@ -76,6 +76,8 @@ static const char hcd_name [] = "ohci_hc #include "ohci.h" #include "pci-quirks.h" +static int alancnt; + static void ohci_dump (struct ohci_hcd *ohci, int verbose); static void ohci_stop (struct usb_hcd *hcd); @@ -291,6 +293,8 @@ static int ohci_urb_dequeue(struct usb_h */ urb_priv = urb->hcpriv; if (urb_priv) { + ohci_dump_ed(ohci, "dequeue", urb_priv->ed, 1); + alancnt = 5; if (urb_priv->ed->state == ED_OPER) start_ed_unlink (ohci, urb_priv->ed); } @@ -801,6 +805,13 @@ static irqreturn_t ohci_irq (struct usb_ return IRQ_HANDLED; } + if (alancnt > 0) { + --alancnt; + ohci_dbg(ohci, "intr %08x enable %08x frame %x\n", + ints, ohci_readl(ohci, ®s->intrenable), + ohci_frame_no(ohci)); + } + /* We only care about interrupts that are enabled */ ints &= ohci_readl(ohci, ®s->intrenable); -- 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