[RDMA for-next V3 2/6] IB/MAD: Add recv path trace point

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Ira Weiny <ira.weiny@xxxxxxxxx>

Trace received MAD details.

Signed-off-by: Ira Weiny <ira.weiny@xxxxxxxxx>

---
Changes from V2
	Change dev_name to string
	Reorder fields for more efficient ring buffer utilization

 drivers/infiniband/core/mad.c | 10 +++++++
 include/trace/events/ib_mad.h | 64 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 74 insertions(+)

diff --git a/drivers/infiniband/core/mad.c b/drivers/infiniband/core/mad.c
index e166d584b80c..8f6d5e49337a 100644
--- a/drivers/infiniband/core/mad.c
+++ b/drivers/infiniband/core/mad.c
@@ -2339,6 +2339,16 @@ static void ib_mad_recv_done(struct ib_cq *cq, struct ib_wc *wc)
 	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 464b33b2af50..0b294a68cebd 100644
--- a/include/trace/events/ib_mad.h
+++ b/include/trace/events/ib_mad.h
@@ -158,6 +158,70 @@
 	)
 );
 
+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(
+		__field(u8,             base_version)
+		__field(u8,             mgmt_class)
+		__field(u8,             class_version)
+		__field(u8,             port_num)
+		__field(u32,            qp_num)
+		__field(u16,            status)
+		__field(u16,            class_specific)
+		__field(u32,            length)
+		__field(u64,            tid)
+		__field(u8,             method)
+		__field(u8,             sl)
+		__field(u16,            attr_id)
+		__field(u32,            attr_mod)
+		__field(u16,            src_qp)
+		__field(u16,            wc_status)
+		__field(u32,            slid)
+		__string(dev_name,      qp_info->port_priv->device->name)
+		__field(u16,            pkey)
+	),
+
+	TP_fast_assign(
+		__assign_str(dev_name,  qp_info->port_priv->device->name);
+		__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 : hdr : " \
+		  "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%08x src QP%d, sl %d " \
+		  "pkey 0x%04x",
+		__get_str(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.3.1




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux