tech-kern archive

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

Re: USB lockup



> Add a check to ohci_softintr to see if the list goes circular and enter
> ddb / dump usbhist when it does...
I already did add a panic and it fired.

I'm still trying to find out how that happens.

What I'm seeing (dumped by device_ctrl_start()) is a chain of four TDs 
(named here after their addresses' three least significant nybbles):
	E20->EE0->FA0->F40->0
which are linked in that sense by both nexttd and td.td_nexttd.

Then, in ohci_softint(), the done queue is (as linked by td.nexttd):
	FA0->EE0->E20->FA0->...
and, as expected, the nexttd links are as before.
Absent the E20->FA0 link, that's exactly what one would expect if the first 
three TDs have been handled (the done list is most recently done first); 
the big question is where that additinal link comes from.

I've added code to ohci_hash_add_td() to catch a TD being added with a 
physical address already present in the hash list, but that didn't fire.


Home | Main Index | Thread Index | Old Index