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;
 
        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),
 
 
 /* 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 */