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