Hi Xenia,
Thanks for adding this. It should be a big help for debugging issues
with isochronous transfers to avoid massive log spam on missed service
intervals.
On Fri, Aug 23, 2013 at 11:15:18AM +0300, Xenia Ragiadakou wrote:
> This patch adds a trace event to the class 'xhci_log_msg', called
> 'xhci_dbg_missed_periodic_tx', that traces the debug statements which
> signal that the xHC is unable to service an isochronous endpoint within
> its service interval either because the endpoint's ring is full and can
> not receive further data, for IN endpoints, or because the endpoint's ring
> is empty, for OUT endpoints, or due to xHC internal buffers' overrun or
> underrun caused by excessive latency on the transfer path.
Could you break this description up into a couple sentences?
You also need to add a trace event for this code in handle_tx_event:
/* We've skipped all the TDs on the ep ring when ep->skip set */
if (ep->skip && td_num == 0) {
ep->skip = false;
xhci_dbg(xhci, "All tds on the ep_ring skipped. "
"Clear skip flag.\n");
ret = 0;
goto cleanup;
}
I would appreciate it if you could clean up that split string, as well.
I also need you to add this code to the trace event:
if (ep->skip) {
xhci_dbg(xhci, "Found td. Clear skip flag.\n");
ep->skip = false;
}
Thanks,
Sarah Sharp
> Signed-off-by: Xenia Ragiadakou <[email protected]>
> ---
> drivers/usb/host/xhci-ring.c | 19 ++++++++++++-------
> drivers/usb/host/xhci-trace.h | 5 +++++
> 2 files changed, 17 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
> index 03f65dc..cbf3e2a 100644
> --- a/drivers/usb/host/xhci-ring.c
> +++ b/drivers/usb/host/xhci-ring.c
> @@ -2484,18 +2484,22 @@ static int handle_tx_event(struct xhci_hcd *xhci,
> * a Ring Overrun Event for IN Isoch endpoint or Ring
> * Underrun Event for OUT Isoch endpoint.
> */
> - xhci_dbg(xhci, "underrun event on endpoint\n");
> + xhci_dbg_trace(xhci, trace_xhci_dbg_missed_periodic_tx,
> + "underrun event on endpoint");
> if (!list_empty(&ep_ring->td_list))
> - xhci_dbg(xhci, "Underrun Event for slot %d ep %d "
> - "still with TDs queued?\n",
> + xhci_dbg_trace(xhci, trace_xhci_dbg_missed_periodic_tx,
> + "Underrun Event for slot %d ep %d "
> + "still with TDs queued?",
> TRB_TO_SLOT_ID(le32_to_cpu(event->flags)),
> ep_index);
> goto cleanup;
> case COMP_OVERRUN:
> - xhci_dbg(xhci, "overrun event on endpoint\n");
> + xhci_dbg_trace(xhci, trace_xhci_dbg_missed_periodic_tx,
> + "overrun event on endpoint");
> if (!list_empty(&ep_ring->td_list))
> - xhci_dbg(xhci, "Overrun Event for slot %d ep %d "
> - "still with TDs queued?\n",
> + xhci_dbg_trace(xhci, trace_xhci_dbg_missed_periodic_tx,
> + "Overrun Event for slot %d ep %d "
> + "still with TDs queued?",
> TRB_TO_SLOT_ID(le32_to_cpu(event->flags)),
> ep_index);
> goto cleanup;
> @@ -2511,7 +2515,8 @@ static int handle_tx_event(struct xhci_hcd *xhci,
> * short transfer when process the ep_ring next time.
> */
> ep->skip = true;
> - xhci_dbg(xhci, "Miss service interval error, set skip flag\n");
> + xhci_dbg_trace(xhci, trace_xhci_dbg_missed_periodic_tx,
> + "Miss service interval error, set skip flag");
> goto cleanup;
> default:
> if (xhci_is_vendor_info_code(xhci, trb_comp_code)) {
> diff --git a/drivers/usb/host/xhci-trace.h b/drivers/usb/host/xhci-trace.h
> index 20364cc..c156685 100644
> --- a/drivers/usb/host/xhci-trace.h
> +++ b/drivers/usb/host/xhci-trace.h
> @@ -67,6 +67,11 @@ DEFINE_EVENT(xhci_log_msg, xhci_dbg_ring_expansion,
> TP_ARGS(vaf)
> );
>
> +DEFINE_EVENT(xhci_log_msg, xhci_dbg_missed_periodic_tx,
> + TP_PROTO(struct va_format *vaf),
> + TP_ARGS(vaf)
> +);
> +
> DECLARE_EVENT_CLASS(xhci_log_ctx,
> TP_PROTO(struct xhci_hcd *xhci, struct xhci_container_ctx *ctx,
> unsigned int ep_num),
> --
> 1.8.3.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-usb" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html