On Mon, 2020-06-29 at 23:21 -0400, Rik van Riel wrote: > > Could you add the code below and take new traces, it will show the > > endpoint > > state after the Babble error. > > Hi Mathias, > > I have finally rebooted into a kernel with your tracepoint. > After a babble error, I get the following info in the trace. > > [ 556.716334] xhci_hcd 0000:00:14.0: Babble error for slot 13 ep 8 > on > endpoint > > 28672.016 :0/0 xhci-hcd:xhci_handle_tx_event(info: 196609, info2: > 12845096, deq: 69501877488, tx_info: 12845252) > 34816.037 :0/0 xhci-hcd:xhci_handle_tx_event(info: 196609, info2: > 12845096, deq: 69501877856, tx_info: 12845252) > 38912.043 :0/0 xhci-hcd:xhci_handle_tx_event(info: 196609, info2: > 12845096, deq: 69501870176, tx_info: 12845252) OK, this is strange indeed. info: 0x30001 info2: 0xc40028 tx_info: c400c4 That suggests the device state is EP_STATE_DISABLED, but we never got the error from the EP_STATE_DISABLED test near the start of handle_tx_event(). If we had, the big switch statement containing the code below would have been bypassed. Unless I am mistaken, does that mean the endpoint context (*ep_ctx) got modified while the code was in the middle of handle_tx_event()? What would cause that? A subsequent transfer to an endpoint while it is in EP_STATE_HALTED, which the comment suggests is the expected endpoint state for a babble error? > > diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci- > > ring.c > > index 0fda0c0f4d31..373d89ef7275 100644 > > --- a/drivers/usb/host/xhci-ring.c > > +++ b/drivers/usb/host/xhci-ring.c > > @@ -2455,6 +2455,7 @@ static int handle_tx_event(struct xhci_hcd > > *xhci, > > case COMP_BABBLE_DETECTED_ERROR: > > xhci_dbg(xhci, "Babble error for slot %u ep %u on > > endpoint\n", > > slot_id, ep_index); > > + trace_xhci_handle_tx_event(ep_ctx); > > status = -EOVERFLOW; > > break; > > /* Completion codes for endpoint error state */ > > diff --git a/drivers/usb/host/xhci-trace.h b/drivers/usb/host/xhci- > > trace.h > > index b19582b2a72c..5081df079f4a 100644 > > --- a/drivers/usb/host/xhci-trace.h > > +++ b/drivers/usb/host/xhci-trace.h > > @@ -360,6 +360,11 @@ DEFINE_EVENT(xhci_log_ep_ctx, > > xhci_add_endpoint, > > TP_ARGS(ctx) > > ); > > > > +DEFINE_EVENT(xhci_log_ep_ctx, xhci_handle_tx_event, > > + TP_PROTO(struct xhci_ep_ctx *ctx), > > + TP_ARGS(ctx) > > +); > > + > > DECLARE_EVENT_CLASS(xhci_log_slot_ctx, > > TP_PROTO(struct xhci_slot_ctx *ctx), > > TP_ARGS(ctx), > > > > > > -- All Rights Reversed.