]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
xhci: add stream context tracing
authorMathias Nyman <mathias.nyman@linux.intel.com>
Wed, 6 Nov 2024 10:14:33 +0000 (12:14 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 6 Nov 2024 12:26:14 +0000 (13:26 +0100)
Show stream id, stream context type (SCT), ring dequeue pointer and
the DMA address of the stream context during stream allocation

Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Link: https://lore.kernel.org/r/20241106101459.775897-8-mathias.nyman@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/host/xhci-mem.c
drivers/usb/host/xhci-trace.h
drivers/usb/host/xhci.h

index d2900197a49e7474843efff3f8c43d9505346119..2952737ccf6c07b34fbe867b7f4e5f82fc3a9609 100644 (file)
@@ -658,6 +658,8 @@ struct xhci_stream_info *xhci_alloc_stream_info(struct xhci_hcd *xhci,
                xhci_dbg(xhci, "Setting stream %d ring ptr to 0x%08llx\n", cur_stream, addr);
 
                ret = xhci_update_stream_mapping(cur_ring, mem_flags);
+
+               trace_xhci_alloc_stream_info_ctx(stream_info, cur_stream);
                if (ret) {
                        xhci_ring_free(xhci, cur_ring);
                        stream_info->stream_rings[cur_stream] = NULL;
index 57b8cb5a8d19788709bc398e4a7db69014128789..56af9f62916a7565bb5254b1dacaa4565732d705 100644 (file)
@@ -314,6 +314,32 @@ DEFINE_EVENT(xhci_log_urb, xhci_urb_dequeue,
        TP_ARGS(urb)
 );
 
+DECLARE_EVENT_CLASS(xhci_log_stream_ctx,
+       TP_PROTO(struct xhci_stream_info *info, unsigned int stream_id),
+       TP_ARGS(info, stream_id),
+       TP_STRUCT__entry(
+               __field(unsigned int, stream_id)
+               __field(u64, stream_ring)
+               __field(dma_addr_t, ctx_array_dma)
+
+       ),
+       TP_fast_assign(
+               __entry->stream_id = stream_id;
+               __entry->stream_ring = le64_to_cpu(info->stream_ctx_array[stream_id].stream_ring);
+               __entry->ctx_array_dma = info->ctx_array_dma + stream_id * 16;
+
+       ),
+       TP_printk("stream %u ctx @%pad: SCT %llu deq %llx", __entry->stream_id,
+               &__entry->ctx_array_dma, CTX_TO_SCT(__entry->stream_ring),
+               __entry->stream_ring
+       )
+);
+
+DEFINE_EVENT(xhci_log_stream_ctx, xhci_alloc_stream_info_ctx,
+       TP_PROTO(struct xhci_stream_info *info, unsigned int stream_id),
+       TP_ARGS(info, stream_id)
+);
+
 DECLARE_EVENT_CLASS(xhci_log_ep_ctx,
        TP_PROTO(struct xhci_ep_ctx *ctx),
        TP_ARGS(ctx),
index 7d81645c2c5d3d741782fd88d8f45f772240c60a..89337562440b5cb69c8746e68e3d200675246ccf 100644 (file)
@@ -554,6 +554,7 @@ struct xhci_stream_ctx {
 
 /* Stream Context Types (section 6.4.1) - bits 3:1 of stream ctx deq ptr */
 #define        SCT_FOR_CTX(p)          (((p) & 0x7) << 1)
+#define        CTX_TO_SCT(p)           (((p) >> 1) & 0x7)
 /* Secondary stream array type, dequeue pointer is to a transfer ring */
 #define        SCT_SEC_TR              0
 /* Primary stream array type, dequeue pointer is to a transfer ring */