mirror of
https://github.com/torvalds/linux.git
synced 2024-12-03 17:41:22 +00:00
xhci: add xhci_cmd_completion trace event
This patch creates a new event class, called xhci_log_event, and defines the xhci_cmd_completion trace event used for tracing the commands issued to xHC that generate a completion event in the event ring. This info can be used, later, to print, in a human readable way, the completion status and flags as well as the command's type and fields using the trace-cmd tool and the appropriate plugin. Also, a tracepoint is added in handle_cmd_completion(). Signed-off-by: Xenia Ragiadakou <burzalodowa@gmail.com> Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
This commit is contained in:
parent
1d27fabec0
commit
63a23b9a74
@ -1380,6 +1380,9 @@ static void handle_cmd_completion(struct xhci_hcd *xhci,
|
||||
return;
|
||||
}
|
||||
|
||||
trace_xhci_cmd_completion(&xhci->cmd_ring->dequeue->generic,
|
||||
(struct xhci_generic_trb *) event);
|
||||
|
||||
if ((GET_COMP_CODE(le32_to_cpu(event->status)) == COMP_CMD_ABORT) ||
|
||||
(GET_COMP_CODE(le32_to_cpu(event->status)) == COMP_CMD_STOP)) {
|
||||
/* If the return value is 0, we think the trb pointed by
|
||||
|
@ -93,6 +93,36 @@ DEFINE_EVENT(xhci_log_ctx, xhci_address_ctx,
|
||||
TP_ARGS(xhci, ctx, ep_num)
|
||||
);
|
||||
|
||||
DECLARE_EVENT_CLASS(xhci_log_event,
|
||||
TP_PROTO(void *trb_va, struct xhci_generic_trb *ev),
|
||||
TP_ARGS(trb_va, ev),
|
||||
TP_STRUCT__entry(
|
||||
__field(void *, va)
|
||||
__field(u64, dma)
|
||||
__field(u32, status)
|
||||
__field(u32, flags)
|
||||
__dynamic_array(__le32, trb, 4)
|
||||
),
|
||||
TP_fast_assign(
|
||||
__entry->va = trb_va;
|
||||
__entry->dma = le64_to_cpu(((u64)ev->field[1]) << 32 |
|
||||
ev->field[0]);
|
||||
__entry->status = le32_to_cpu(ev->field[2]);
|
||||
__entry->flags = le32_to_cpu(ev->field[3]);
|
||||
memcpy(__get_dynamic_array(trb), trb_va,
|
||||
sizeof(struct xhci_generic_trb));
|
||||
),
|
||||
TP_printk("\ntrb_dma=@%llx, trb_va=@%p, status=%08x, flags=%08x",
|
||||
(unsigned long long) __entry->dma, __entry->va,
|
||||
__entry->status, __entry->flags
|
||||
)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(xhci_log_event, xhci_cmd_completion,
|
||||
TP_PROTO(void *trb_va, struct xhci_generic_trb *ev),
|
||||
TP_ARGS(trb_va, ev)
|
||||
);
|
||||
|
||||
#endif /* __XHCI_TRACE_H */
|
||||
|
||||
/* this part must be outside header guard */
|
||||
|
Loading…
Reference in New Issue
Block a user