Hi On 03.07.2015 09:35, SAUROV KANTI SHYAM wrote: > Hi Mathias > The kernel version is 3.8.2, but patches of 3.17 are back ported into it. Ok, there are many xhci changes since 3.8 so this might be anything. Is it possible for you to try and reproduce this with a fresh kernel? 4.1 maybe? > >> Event ring dequeue is increased either in handle_tx_event(), cleanup: >> if (trb_comp_code == COMP_MISSED_INT || !ep->skip) { >> inc_deq(xhci, xhci->event_ring); > > Event ring dequeue should be incremented for "stop,-invalid length” transfer event as well (as described in the patch below): > Signed-off-by: Saurov Shyam <saurov.s@xxxxxxxxxxx> > --- > drivers/usb/host/xhci-ring.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c > index 7d34cbf..4d2817d 100644 > --- a/drivers/usb/host/xhci-ring.c > +++ b/drivers/usb/host/xhci-ring.c > @@ -2500,7 +2500,9 @@ cleanup: > * Do not update event ring dequeue pointer if ep->skip is set. > * Will roll back to continue process missed tds. > */ > - if (trb_comp_code == COMP_MISSED_INT || !ep->skip) { > + if (trb_comp_code == COMP_MISSED_INT || > + trb_comp_code == COMP_STOP_INVAL || > + !ep->skip) { > inc_deq(xhci, xhci->event_ring); > } Does this help? The !ep->skip condition is usually true, and inc_dec() is usually called. It's possible there is some corner case where we FSE stopped an isoc transfer that just had a missed service event and ep->skip is set, and the event_seg was not found as the event->buffer points to the previous TD. I'm going on a two weeks vacation starting now, so I'll need to get back to this later. -Mathias -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html