> From: Xu, Andiry [mailto:Andiry.Xu@xxxxxxx] > Hi Sarah, > > When a missed service interval event is encountered, we just set the > ep->skip flag, increase the event ring dequeue pointer, and then return. > We will enter the do-while loop and process missed tds the next time we > encounter a transfer event from this endpoint. > > If the next event after a missed service interval isn't for that > endpoint, I think is OK. This endpoint does not have its skip flag set, > and the do-while loop will run only once and then returns. If this > endpoint's skip flag is also set, then we'll process its missed tds, > since it must have a missed service interval event some time ago. > > If we get two missed service intervals for the same endpoint in a row, > it will be two cases: the two missed service interval events are > consecutive, or not. If they are consecutive, we just return and process > the missed tds next time when it's not a missed service interval event; > if they are not consecutive and there's a transfer event between them, > we should process the missed tds for twice. > > If a missed service interval is followed by a Ring Underrun/overrun > event for that isoc ring, there may be problems. In this case the > handle_tx_event() should return. I think ep->skip flag should get > cleared when encounter a Ring Underrun/overrun event. Maybe this causes > Paul's issue? > > If Paul can print his event ring when the infinite loop case happens, > that may help to find the actual case. > > Thanks & Best regards, > Andiry Hi Andiry, Attached is a dmesg log from when this happens. I have added calls to xhci_debug_ring, xhci_dbg_ring_ptrs, and xhci_dbg_ep_rings (for each of the active slots) when I see that event_seg is NULL. You can search for the message "event_seg is NULL" to find where this happens. Note, I have removed some of the other debug messages, because the log was way too verbose otherwise, and also added one or two of my own. Let me know if you need any more info. Thanks. -- Paul
Attachment:
dmesg.log.gz
Description: dmesg.log.gz