IB/rdmavt: Add additional fields to post send trace
authorMike Marciniszyn <mike.marciniszyn@intel.com>
Tue, 21 Mar 2017 00:25:10 +0000 (17:25 -0700)
committerDoug Ledford <dledford@redhat.com>
Wed, 5 Apr 2017 18:45:09 +0000 (14:45 -0400)
This fix is to get additional debugging information.

The following fields are added:
- wqe
- qpt
- num_sge
- ssn
- pid
- send_flags

These additional fields provide for more focused filtering
and triggering.

The patch also moves the trace to just before the wqe is
posted to get the most accurate information and future proofs
the code to trace all possible reserved opcodes.

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/sw/rdmavt/qp.c
drivers/infiniband/sw/rdmavt/trace_tx.h

index 28fb7241ae6b4bc6a85733d7eec0847635a11a05..3c55a8b420fac20b149cc6b8ccb00a0f669b6024 100644 (file)
@@ -1772,11 +1772,11 @@ static int rvt_post_one_wr(struct rvt_qp *qp,
                                        0);
                qp->s_next_psn = wqe->lpsn + 1;
        }
-       trace_rvt_post_one_wr(qp, wqe);
        if (unlikely(reserved_op))
                rvt_qp_wqe_reserve(qp, wqe);
        else
                qp->s_avail--;
+       trace_rvt_post_one_wr(qp, wqe);
        smp_wmb(); /* see request builders */
        qp->s_head = next;
 
index 0e03173662d8f00647feab8423b342c65acb4417..a613a22237510744a266a7c0fcd1213150b2f345 100644 (file)
@@ -71,10 +71,20 @@ __print_symbolic(opcode,                                   \
        wr_opcode_name(RDMA_READ_WITH_INV),                \
        wr_opcode_name(LOCAL_INV),                         \
        wr_opcode_name(MASKED_ATOMIC_CMP_AND_SWP),         \
-       wr_opcode_name(MASKED_ATOMIC_FETCH_AND_ADD))
+       wr_opcode_name(MASKED_ATOMIC_FETCH_AND_ADD),       \
+       wr_opcode_name(RESERVED1),                         \
+       wr_opcode_name(RESERVED2),                         \
+       wr_opcode_name(RESERVED3),                         \
+       wr_opcode_name(RESERVED4),                         \
+       wr_opcode_name(RESERVED5),                         \
+       wr_opcode_name(RESERVED6),                         \
+       wr_opcode_name(RESERVED7),                         \
+       wr_opcode_name(RESERVED8),                         \
+       wr_opcode_name(RESERVED9),                         \
+       wr_opcode_name(RESERVED10))
 
 #define POS_PRN \
-"[%s] wr_id %llx qpn %x psn 0x%x lpsn 0x%x length %u opcode 0x%.2x,%s size %u avail %u head %u last %u"
+"[%s] wqe %p wr_id %llx send_flags %x qpn %x qpt %u psn %x lpsn %x ssn %x length %u opcode 0x%.2x,%s size %u avail %u head %u last %u pid %u num_sge %u"
 
 TRACE_EVENT(
        rvt_post_one_wr,
@@ -83,7 +93,9 @@ TRACE_EVENT(
        TP_STRUCT__entry(
                RDI_DEV_ENTRY(ib_to_rvt(qp->ibqp.device))
                __field(u64, wr_id)
+               __field(struct rvt_swqe *, wqe)
                __field(u32, qpn)
+               __field(u32, qpt)
                __field(u32, psn)
                __field(u32, lpsn)
                __field(u32, length)
@@ -92,11 +104,17 @@ TRACE_EVENT(
                __field(u32, avail)
                __field(u32, head)
                __field(u32, last)
+               __field(u32, ssn)
+               __field(int, send_flags)
+               __field(pid_t, pid)
+               __field(int, num_sge)
        ),
        TP_fast_assign(
                RDI_DEV_ASSIGN(ib_to_rvt(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->psn = wqe->psn;
                __entry->lpsn = wqe->lpsn;
                __entry->length = wqe->length;
@@ -105,20 +123,30 @@ TRACE_EVENT(
                __entry->avail = qp->s_avail;
                __entry->head = qp->s_head;
                __entry->last = qp->s_last;
+               __entry->pid = qp->pid;
+               __entry->ssn = wqe->ssn;
+               __entry->send_flags = wqe->wr.send_flags;
+               __entry->num_sge = wqe->wr.num_sge;
        ),
        TP_printk(
                POS_PRN,
                __get_str(dev),
+               __entry->wqe,
                __entry->wr_id,
+               __entry->send_flags,
                __entry->qpn,
+               __entry->qpt,
                __entry->psn,
                __entry->lpsn,
+               __entry->ssn,
                __entry->length,
                __entry->opcode, show_wr_opcode(__entry->opcode),
                __entry->size,
                __entry->avail,
                __entry->head,
-               __entry->last
+               __entry->last,
+               __entry->pid,
+               __entry->num_sge
        )
 );