Re: ehci_hcd: fatal error, HC died with usbaudio

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

 



On Fri, 2 Apr 2010, Nate Case wrote:

> On Thu, 2010-04-01 at 17:20 -0500, Nate Case wrote:
> > On Thu, 2010-04-01 at 17:31 -0400, Alan Stern wrote:
> > > > I assume so, though it's hard for me to test this with a regular PC EHCI
> > > > controller (using the same hubs and audio CODECS).  A controller problem
> > > > doesn't seem too unlikely.
> > > 
> > > The hub certainly doesn't have to be the same, and even using a 
> > > different USB audio codec might not make any difference.  If you've got 
> > > another one available, could you try it on both a regular PC and on the 
> > > custom board?
> > 
> > I'll try this soon.
> 
> I tried today with the following setup:
> 
>  * Off-the-shelf PCI USB 2.0 card (VT6212 EHCI controller)
>  * Multi-TT 2->7 hub similar to what I have on the custom card
>  * CM-108 USB audio CODEC
> 
> Though it was harder to do, I got the same "fatal error".  It would not
> happen as reliably as my other setup, and it also *seemed* to happen
> more often when I tried a different USB audio CODEC.

Okay.  I feel better knowing that this isn't specific to one type of 
controller hardware -- that means it's much more likely to be a bug in 
the driver and I might even be able to replicate it.

Can you post the output from "lsusb -v" for the codec on your custom 
board?

> One interesting thing is that I could *NOT* get a usbmon trace of this
> scenario, because the failure would never happen when I was reading
> from /sys/kernel/debug/usb/usbmon/0u.  Very elusive :)

That would indicate the bug has a timing-related component.  For 
example, maybe the CPU frees some memory (which then gets overwritten) 
before the controller has finished using it.  Delaying the CPU would 
then prevent the bug from surfacing.

> > Maybe reuse of the sitd in sitd_complete() needs to be delayed in the 
> > same way that reuse of the itd in itd_complete() is, via 
> > free_cached_itd_list().
> 
> I didn't know what I was doing honestly, but I attempted to try this
> today also.  In short, I added a cached_sitd_list to the ehci_hcd and
> changed the index field of struct ehci_sitd to be an array like in
> struct ehci_itd.  Next, I went through and tried to make the sitd
> functions more like the itd functions with respect to the itd list
> usage.  I probably made all kinds of horrible mistakes, because I ended
> up getting errors like this:
> 
> [   33.830348] ehci_hcd 0000:07:0c.1: request bf1f49c0 would overflow (65523+16>
> 2048)

Ugh.  That's not right at all; the first value (65523) shouldn't be
larger than 2047.  Clearly something got messed up.  Changing the index
field also doesn't sound like a good thing to do.

I'll try to find time to do this properly.

Alan Stern

--
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