xhci: add xhci_address_ctx trace event
This patch defines a new event class, called xhci_log_ctx, that records in the ring buffer the context data, the context type (input or output), the context dma and virtual addresses, the context endpoint entries, the slot ID and whether the xHC uses 64 byte context data structures. This information can be used, later, to parse and display the context data fields with the appropriate plugin using the trace-cmd tool. Also, this patch defines a trace event, called xhci_address_ctx, to trace the contexts related to the Address Device command and adds the associated tracepoints in xhci_address_device(). Signed-off-by: Xenia Ragiadakou <burzalodowa@gmail.com> Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
此提交包含在:
@@ -18,6 +18,7 @@
|
||||
#define __XHCI_TRACE_H
|
||||
|
||||
#include <linux/tracepoint.h>
|
||||
#include "xhci.h"
|
||||
|
||||
#define XHCI_MSG_MAX 500
|
||||
|
||||
@@ -51,6 +52,47 @@ DEFINE_EVENT(xhci_log_msg, xhci_dbg_reset_ep,
|
||||
TP_ARGS(vaf)
|
||||
);
|
||||
|
||||
DECLARE_EVENT_CLASS(xhci_log_ctx,
|
||||
TP_PROTO(struct xhci_hcd *xhci, struct xhci_container_ctx *ctx,
|
||||
unsigned int ep_num),
|
||||
TP_ARGS(xhci, ctx, ep_num),
|
||||
TP_STRUCT__entry(
|
||||
__field(int, ctx_64)
|
||||
__field(unsigned, ctx_type)
|
||||
__field(dma_addr_t, ctx_dma)
|
||||
__field(u8 *, ctx_va)
|
||||
__field(unsigned, ctx_ep_num)
|
||||
__field(int, slot_id)
|
||||
__dynamic_array(u32, ctx_data,
|
||||
((HCC_64BYTE_CONTEXT(xhci->hcc_params) + 1) * 8) *
|
||||
((ctx->type == XHCI_CTX_TYPE_INPUT) + ep_num + 1))
|
||||
),
|
||||
TP_fast_assign(
|
||||
struct usb_device *udev;
|
||||
|
||||
udev = to_usb_device(xhci_to_hcd(xhci)->self.controller);
|
||||
__entry->ctx_64 = HCC_64BYTE_CONTEXT(xhci->hcc_params);
|
||||
__entry->ctx_type = ctx->type;
|
||||
__entry->ctx_dma = ctx->dma;
|
||||
__entry->ctx_va = ctx->bytes;
|
||||
__entry->slot_id = udev->slot_id;
|
||||
__entry->ctx_ep_num = ep_num;
|
||||
memcpy(__get_dynamic_array(ctx_data), ctx->bytes,
|
||||
((HCC_64BYTE_CONTEXT(xhci->hcc_params) + 1) * 32) *
|
||||
((ctx->type == XHCI_CTX_TYPE_INPUT) + ep_num + 1));
|
||||
),
|
||||
TP_printk("\nctx_64=%d, ctx_type=%u, ctx_dma=@%llx, ctx_va=@%p",
|
||||
__entry->ctx_64, __entry->ctx_type,
|
||||
(unsigned long long) __entry->ctx_dma, __entry->ctx_va
|
||||
)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(xhci_log_ctx, xhci_address_ctx,
|
||||
TP_PROTO(struct xhci_hcd *xhci, struct xhci_container_ctx *ctx,
|
||||
unsigned int ep_num),
|
||||
TP_ARGS(xhci, ctx, ep_num)
|
||||
);
|
||||
|
||||
#endif /* __XHCI_TRACE_H */
|
||||
|
||||
/* this part must be outside header guard */
|
||||
|
新增問題並參考
封鎖使用者