IB/rdmavt: Add swqe completion trace
authorMike Marciniszyn <mike.marciniszyn@intel.com>
Tue, 21 Mar 2017 00:25:23 +0000 (17:25 -0700)
committerDoug Ledford <dledford@redhat.com>
Wed, 5 Apr 2017 18:45:09 +0000 (14:45 -0400)
The following fields are available for filter/trace:
- wqe
- wr_id
- qpn
- qpt
- length
- idx
- ssn
- (wr)opcode
- (wr)send_flags

Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/hw/hfi1/rc.c
drivers/infiniband/hw/hfi1/ruc.c
drivers/infiniband/hw/hfi1/trace_tx.h

index 4649530ac4e868e479728e6ba74ffc9de1f42d75..0e5657803a5491298606bf36652ea7ff9f40b167 100644 (file)
@@ -1028,6 +1028,7 @@ void hfi1_rc_send_complete(struct rvt_qp *qp, struct ib_header *hdr)
                    cmp_psn(qp->s_sending_psn, qp->s_sending_hpsn) <= 0)
                        break;
                s_last = qp->s_last;
+               trace_hfi1_qp_send_completion(qp, wqe, s_last);
                if (++s_last >= qp->s_size)
                        s_last = 0;
                qp->s_last = s_last;
@@ -1079,6 +1080,7 @@ static struct rvt_swqe *do_rc_completion(struct rvt_qp *qp,
 
                rvt_put_swqe(wqe);
                s_last = qp->s_last;
+               trace_hfi1_qp_send_completion(qp, wqe, s_last);
                if (++s_last >= qp->s_size)
                        s_last = 0;
                qp->s_last = s_last;
index d2eb793b34af28c0ad36646b8c93d401c1e06583..eeb650dde7764990a39ff7ad9afef12dd6fb972a 100644 (file)
@@ -909,8 +909,10 @@ void hfi1_send_complete(struct rvt_qp *qp, struct rvt_swqe *wqe,
 
        last = qp->s_last;
        old_last = last;
+       trace_hfi1_qp_send_completion(qp, wqe, last);
        if (++last >= qp->s_size)
                last = 0;
+       trace_hfi1_qp_send_completion(qp, wqe, last);
        qp->s_last = last;
        /* See post_send() */
        barrier();
index 415d6be42c5de263a9c0a8ac1f16986983557fe4..2c9ac57657d3f031b200b4ca22538f3c10c60607 100644 (file)
@@ -633,6 +633,49 @@ DEFINE_EVENT(hfi1_bct_template, bct_get,
             TP_PROTO(struct hfi1_devdata *dd, struct buffer_control *bc),
             TP_ARGS(dd, bc));
 
+TRACE_EVENT(
+       hfi1_qp_send_completion,
+       TP_PROTO(struct rvt_qp *qp, struct rvt_swqe *wqe, u32 idx),
+       TP_ARGS(qp, wqe, idx),
+       TP_STRUCT__entry(
+               DD_DEV_ENTRY(dd_from_ibdev(qp->ibqp.device))
+               __field(struct rvt_swqe *, wqe)
+               __field(u64, wr_id)
+               __field(u32, qpn)
+               __field(u32, qpt)
+               __field(u32, length)
+               __field(u32, idx)
+               __field(u32, ssn)
+               __field(enum ib_wr_opcode, opcode)
+               __field(int, send_flags)
+       ),
+       TP_fast_assign(
+               DD_DEV_ASSIGN(dd_from_ibdev(qp->ibqp.device))
+               __entry->wqe = wqe;
+               __entry->wr_id = wqe->wr.wr_id;
+               __entry->qpn = qp->ibqp.qp_num;
+               __entry->qpt = qp->ibqp.qp_type;
+               __entry->length = wqe->length;
+               __entry->idx = idx;
+               __entry->ssn = wqe->ssn;
+               __entry->opcode = wqe->wr.opcode;
+               __entry->send_flags = wqe->wr.send_flags;
+       ),
+       TP_printk(
+               "[%s] qpn 0x%x qpt %u wqe %p idx %u wr_id %llx length %u ssn %u opcode %x send_flags %x",
+               __get_str(dev),
+               __entry->qpn,
+               __entry->qpt,
+               __entry->wqe,
+               __entry->idx,
+               __entry->wr_id,
+               __entry->length,
+               __entry->ssn,
+               __entry->opcode,
+               __entry->send_flags
+       )
+);
+
 #endif /* __HFI1_TRACE_TX_H */
 
 #undef TRACE_INCLUDE_PATH