> From: Andiry Xu [mailto:andiry.xu@xxxxxxx] <snip> > But I haven't seen td bd415150 and following tds on the endpoint ring. > I'm afraid the full endpoint ring is not printed, because I allocate 8 > segments for isoc endpoint, but there is only one segment showed in the > log. Perhaps you only print one segment of isoc endpoint ring? > > With your patch, every time when event_seg is NULL, you break out and > returns. But event_seg will be NULL when a missed service interval event > is encountered and it's quite normal for isoc transfer. Your patch may > workaround the issue but it does not help to find the root cause. And > suppose the do-while will not run infinity. ep->skip is cleared when > irq_handler found the td on the ring, or when the td_list is empty. > Since urb_enqueue needs to acquire the lock which is hold by > irq_handler, it cannot insert tds to the ring. Eventually the td_list is > empty, and ep->skip is clear. Hi Andiry, I have some good/bad news (depending on how you look at it). I have updated my debug code to print all the ring segments instead of just one. However, our xHCI controller hardware was just updated to the latest version. With this version, the "event_seg is NULL" case happens *much* less frequently than before. So far, I have only been able to reproduce it once in over an hour of intensive testing. Unfortunately, the debug messages had already been flushed from the log by the time I realized it had occurred. Previously, it would happen after just a few startup/shutdown cycles of the webcam app. So it's possible that the problematic case I was seeing was related to some sort of hardware issue that has now been resolved. I will keep trying to capture a dmesg log from when it does happen, just to be sure. -- Paul ��.n��������+%������w��{.n�����{���)��jg��������ݢj����G�������j:+v���w�m������w�������h�����٥