Alan Stern wrote:
> >
> > To enqueue a new TD, the HCD fills the old dummy TD and appends a
new TD
> > to the end of the list. It should then update TailP. It *looks* like
the
> > HCD appended a TD to the queue next but didn't update ed->dummy or
> > TailP.
> 
> Could be the driver updated the pointers but did so at the wrong time,
> with the result that the controller overwrote them with older values.
> Or maybe just one of them was overwritten.  Would that explain your
> observations?

The HC shouldn't ever overwrite TailP (it should only touch HeadP). And
dummy is only used by the driver, I think. The worst case here would be
if the HC advanced HeadP, pulled the TD off the queue and never moved it
to the donelist. The best case would be some kind of timing issue within
the driver. Not that I want to find a bug, but I'd much rather that than
completely broken hardware.

I can dump all of the ED and TD structures the next time this happens.
What I'd really like is to be able to track the ED history, to see
whether the TD was enqueued, and whether the controller changed any of
the pointers after it was submitted. But by the time it's obvious
there's a problem, it's too late for that.

I guess one experiment would be to reenqueue the TD after this happens.
That would indicate whether the controller 'missed' the TD or whether
the endpoint is really hung.

Mike

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to