cvs commit: src/sys/dev/usb ehci.c ehci_pci.c ehcivar.h

Juergen Lock nox at jelal.kn-bremen.de
Tue Jan 31 11:44:18 PST 2006


On Tue, Jan 31, 2006 at 07:20:46PM +0100, Juergen Lock wrote:
> On Tue, Jan 31, 2006 at 01:12:35AM +0000, Ian Dowse wrote:
> > In message <20060130223413.GA11711 at saturn.kn-bremen.de>, Juergen Lock writes:
> > > Alright, here comes that:
> > 
> > >    intr_context = 3,
> > 
> > Interesting - this actually suggests that two threads might be in
> > the the interrupt service routine at the same time, which should
> > not be possible unless there is a bug causing a callback to sleep.
> > 
> > Could you see if you can find the EHCI interrupt thread in the output of:
> > 
> > 	ps -axl -M vmcore -N kernel | grep irq
> > 
> > It might show up like "[irq3: ehci" but if there are other interrupts
> > shared with it you might need to look through dmesg output to find the
> > IRQ number used by ehci and then look for that thread instead.
> 
> Had to look at dmesg, ehci is sharing irq 11 with the promise sata
> card and the symbios scsi card.
> > 
> > Then from gdb, use 'info threads' to find the gdb thread ID for it
> > (look for the PID=XX then read the first column). Finally, "thread
> > TID" followed by "bt" should show what that thread is doing. e.g.
> > if you see
> > 
> >   7 Thread 100002 (PID=14: irq3: ehci0)  0xc050bb23 in ...
> > 
> > then use "thread 7" and "bt".
> 
>  Alright, looks like it was paging: (usb_block_allocmem ending up
> calling contigmalloc...  which makes me wonder what would happen
> there if someone had swap on a umass device?  swap here is on
> ad4s2b which is on the sata card.)

Ah, seems the actual problem is that it is sleeping although
bus_dmamem_alloc is called with BUS_DMA_NOWAIT, and there even is
a pr for that:
	http://www.freebsd.org/cgi/query-pr.cgi?pr=78179
The pr is still open so i guess there is no fix yet?


More information about the freebsd-usb mailing list