Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 63a23b9a authored by Xenia Ragiadakou's avatar Xenia Ragiadakou Committed by Sarah Sharp
Browse files

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: default avatarXenia Ragiadakou <burzalodowa@gmail.com>
Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
parent 1d27fabe
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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
+30 −0
Original line number Diff line number Diff line
@@ -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 */