Re: usb audio breaks ohci-pci

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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, &regs->intrenable),
+				ohci_frame_no(ohci));
+	}
+
 	/* We only care about interrupts that are enabled */
 	ints &= ohci_readl(ohci, &regs->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




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux