xhci: add trace for debug messages related to endpoint reset
This patch defines a new trace event, which is called xhci_dbg_reset_ep and belongs in the event class xhci_log_msg, and adds tracepoints that trace the debug messages associated with resetting an endpoint after the reception of a STALL packet. Signed-off-by: Xenia Ragiadakou <burzalodowa@gmail.com> Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
This commit is contained in:
committed by
Sarah Sharp
parent
4bdfe4c38f
commit
a0254324ee
@@ -1151,7 +1151,8 @@ static void handle_reset_ep_completion(struct xhci_hcd *xhci,
|
|||||||
/* This command will only fail if the endpoint wasn't halted,
|
/* This command will only fail if the endpoint wasn't halted,
|
||||||
* but we don't care.
|
* but we don't care.
|
||||||
*/
|
*/
|
||||||
xhci_dbg(xhci, "Ignoring reset ep completion code of %u\n",
|
xhci_dbg_trace(xhci, trace_xhci_dbg_reset_ep,
|
||||||
|
"Ignoring reset ep completion code of %u",
|
||||||
GET_COMP_CODE(le32_to_cpu(event->status)));
|
GET_COMP_CODE(le32_to_cpu(event->status)));
|
||||||
|
|
||||||
/* HW with the reset endpoint quirk needs to have a configure endpoint
|
/* HW with the reset endpoint quirk needs to have a configure endpoint
|
||||||
|
|||||||
@@ -46,6 +46,11 @@ DEFINE_EVENT(xhci_log_msg, xhci_dbg_quirks,
|
|||||||
TP_ARGS(vaf)
|
TP_ARGS(vaf)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
DEFINE_EVENT(xhci_log_msg, xhci_dbg_reset_ep,
|
||||||
|
TP_PROTO(struct va_format *vaf),
|
||||||
|
TP_ARGS(vaf)
|
||||||
|
);
|
||||||
|
|
||||||
#endif /* __XHCI_TRACE_H */
|
#endif /* __XHCI_TRACE_H */
|
||||||
|
|
||||||
/* this part must be outside header guard */
|
/* this part must be outside header guard */
|
||||||
|
|||||||
@@ -2818,7 +2818,8 @@ void xhci_cleanup_stalled_ring(struct xhci_hcd *xhci,
|
|||||||
struct xhci_dequeue_state deq_state;
|
struct xhci_dequeue_state deq_state;
|
||||||
struct xhci_virt_ep *ep;
|
struct xhci_virt_ep *ep;
|
||||||
|
|
||||||
xhci_dbg(xhci, "Cleaning up stalled endpoint ring\n");
|
xhci_dbg_trace(xhci, trace_xhci_dbg_reset_ep,
|
||||||
|
"Cleaning up stalled endpoint ring");
|
||||||
ep = &xhci->devs[udev->slot_id]->eps[ep_index];
|
ep = &xhci->devs[udev->slot_id]->eps[ep_index];
|
||||||
/* We need to move the HW's dequeue pointer past this TD,
|
/* We need to move the HW's dequeue pointer past this TD,
|
||||||
* or it will attempt to resend it on the next doorbell ring.
|
* or it will attempt to resend it on the next doorbell ring.
|
||||||
@@ -2831,7 +2832,8 @@ void xhci_cleanup_stalled_ring(struct xhci_hcd *xhci,
|
|||||||
* issue a configure endpoint command later.
|
* issue a configure endpoint command later.
|
||||||
*/
|
*/
|
||||||
if (!(xhci->quirks & XHCI_RESET_EP_QUIRK)) {
|
if (!(xhci->quirks & XHCI_RESET_EP_QUIRK)) {
|
||||||
xhci_dbg(xhci, "Queueing new dequeue state\n");
|
xhci_dbg_trace(xhci, trace_xhci_dbg_reset_ep,
|
||||||
|
"Queueing new dequeue state");
|
||||||
xhci_queue_new_dequeue_state(xhci, udev->slot_id,
|
xhci_queue_new_dequeue_state(xhci, udev->slot_id,
|
||||||
ep_index, ep->stopped_stream, &deq_state);
|
ep_index, ep->stopped_stream, &deq_state);
|
||||||
} else {
|
} else {
|
||||||
@@ -2874,16 +2876,19 @@ void xhci_endpoint_reset(struct usb_hcd *hcd,
|
|||||||
ep_index = xhci_get_endpoint_index(&ep->desc);
|
ep_index = xhci_get_endpoint_index(&ep->desc);
|
||||||
virt_ep = &xhci->devs[udev->slot_id]->eps[ep_index];
|
virt_ep = &xhci->devs[udev->slot_id]->eps[ep_index];
|
||||||
if (!virt_ep->stopped_td) {
|
if (!virt_ep->stopped_td) {
|
||||||
xhci_dbg(xhci, "Endpoint 0x%x not halted, refusing to reset.\n",
|
xhci_dbg_trace(xhci, trace_xhci_dbg_reset_ep,
|
||||||
|
"Endpoint 0x%x not halted, refusing to reset.",
|
||||||
ep->desc.bEndpointAddress);
|
ep->desc.bEndpointAddress);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (usb_endpoint_xfer_control(&ep->desc)) {
|
if (usb_endpoint_xfer_control(&ep->desc)) {
|
||||||
xhci_dbg(xhci, "Control endpoint stall already handled.\n");
|
xhci_dbg_trace(xhci, trace_xhci_dbg_reset_ep,
|
||||||
|
"Control endpoint stall already handled.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
xhci_dbg(xhci, "Queueing reset endpoint command\n");
|
xhci_dbg_trace(xhci, trace_xhci_dbg_reset_ep,
|
||||||
|
"Queueing reset endpoint command");
|
||||||
spin_lock_irqsave(&xhci->lock, flags);
|
spin_lock_irqsave(&xhci->lock, flags);
|
||||||
ret = xhci_queue_reset_ep(xhci, udev->slot_id, ep_index);
|
ret = xhci_queue_reset_ep(xhci, udev->slot_id, ep_index);
|
||||||
/*
|
/*
|
||||||
|
|||||||
Reference in New Issue
Block a user