From: Ira Weiny <[email protected]>

Signed-off-by: Ira Weiny <[email protected]>
---
 drivers/infiniband/core/mad.c | 10 +++++++
 include/trace/events/ib_mad.h | 63 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 73 insertions(+)

diff --git a/drivers/infiniband/core/mad.c b/drivers/infiniband/core/mad.c
index 0631bff54755..0dc0ae78d313 100644
--- a/drivers/infiniband/core/mad.c
+++ b/drivers/infiniband/core/mad.c
@@ -2051,6 +2051,16 @@ static void ib_mad_recv_done_handler(struct 
ib_mad_port_private *port_priv,
        if (!validate_mad((const struct ib_mad_hdr *)recv->mad, qp_info, opa))
                goto out;
 
+       if (trace_ib_mad_recv_done_handler_enabled()) {
+               u16 pkey;
+
+               ib_query_pkey(qp_info->port_priv->device, 
qp_info->port_priv->port_num,
+                             wc->pkey_index, &pkey);
+
+               trace_ib_mad_recv_done_handler(qp_info, wc, (struct ib_mad_hdr 
*)recv->mad,
+                                              pkey);
+       }
+
        mad_size = recv->mad_size;
        response = alloc_mad_private(mad_size, GFP_KERNEL);
        if (!response) {
diff --git a/include/trace/events/ib_mad.h b/include/trace/events/ib_mad.h
index 7e42ac35324a..8704bbc476bd 100644
--- a/include/trace/events/ib_mad.h
+++ b/include/trace/events/ib_mad.h
@@ -185,6 +185,69 @@ TRACE_EVENT(ib_mad_send_done_handler,
        )
 );
 
+TRACE_EVENT(ib_mad_recv_done_handler,
+       TP_PROTO(struct ib_mad_qp_info *qp_info, struct ib_wc *wc, struct 
ib_mad_hdr *mad_hdr, u16 pkey),
+       TP_ARGS(qp_info, wc, mad_hdr, pkey),
+
+       TP_STRUCT__entry(
+               __array(char,           dev_name, IB_DEVICE_NAME_MAX )
+               __field(u8,             port_num                     )
+               __field(u32,            qp_num                       )
+               __field(u32,            length                       )
+               __field(u8,             base_version                 )
+               __field(u8,             mgmt_class                   )
+               __field(u8,             class_version                )
+               __field(u8,             method                       )
+               __field(u16,            status                       )
+               __field(u16,            class_specific               )
+               __field(u64,            tid                          )
+               __field(u16,            attr_id                      )
+               __field(u32,            attr_mod                     )
+               __field(u16,            slid                         )
+               __field(u16,            src_qp                       )
+               __field(u8,             sl                           )
+               __field(u16,            pkey                         )
+               __field(u16,            wc_status                    )
+       ),
+
+       TP_fast_assign(
+               memcpy(__entry->dev_name, qp_info->port_priv->device->name, 
IB_DEVICE_NAME_MAX);
+               __entry->port_num = qp_info->port_priv->port_num;
+               __entry->qp_num = qp_info->qp->qp_num;
+               __entry->length = wc->byte_len;
+               __entry->base_version = mad_hdr->base_version;
+               __entry->mgmt_class = mad_hdr->mgmt_class;
+               __entry->class_version = mad_hdr->class_version;
+               __entry->method = mad_hdr->method;
+               __entry->status = mad_hdr->status;
+               __entry->class_specific = mad_hdr->class_specific;
+               __entry->tid = mad_hdr->tid;
+               __entry->attr_id = mad_hdr->attr_id;
+               __entry->attr_mod = mad_hdr->attr_mod;
+               __entry->slid = wc->slid;
+               __entry->src_qp = wc->src_qp;
+               __entry->sl = wc->sl;
+               __entry->pkey = pkey;
+               __entry->wc_status = wc->status;
+       ),
+
+       TP_printk("%s:%d QP%d : RECV WC Status %d : length %d " \
+                 "base_ver 0x%02x class 0x%02x class_ver 0x%02x method 0x%02x 
" \
+                 "status 0x%04x class_specific 0x%04x tid 0x%016llx " \
+                 "attr_id 0x%04x attr_mod 0x%08x slid 0x%04x src QP%d, sl %d " 
\
+                 "pkey 0x%04x",
+               __entry->dev_name, __entry->port_num, __entry->qp_num,
+               __entry->wc_status,
+               __entry->length,
+               __entry->base_version, __entry->mgmt_class, 
__entry->class_version,
+               __entry->method, be16_to_cpu(__entry->status),
+               be16_to_cpu(__entry->class_specific),
+               be64_to_cpu(__entry->tid), be16_to_cpu(__entry->attr_id),
+               be32_to_cpu(__entry->attr_mod),
+               __entry->slid, __entry->src_qp, __entry->sl, __entry->pkey
+       )
+);
+
 
 #endif /* _TRACE_IB_MAD_H */
 
-- 
1.8.2

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to