Message ID | 20190317195950.2991-3-ira.weiny@intel.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Add MAD stack trace points | expand |
>-----Original Message----- >From: Weiny, Ira >Sent: Sunday, March 17, 2019 4:00 PM >To: Jason Gunthorpe <jgg@ziepe.ca>; Steven Rostedt ><rostedt@goodmis.org> >Cc: Ingo Molnar <mingo@redhat.com>; linux-rdma@vger.kernel.org; Weiny, >Ira <ira.weiny@intel.com>; Hal Rosenstock <hal@dev.mellanox.co.il>; Alexei >Starovoitov <ast@kernel.org>; Leon Romanovsky <leon@kernel.org>; Ruhl, >Michael J <michael.j.ruhl@intel.com> >Subject: [PATCH V6 2/6] IB/MAD: Add recv path trace point > >From: Ira Weiny <ira.weiny@intel.com> > >Trace received MAD details. > >CC: Hal Rosenstock <hal@dev.mellanox.co.il> >CC: Alexei Starovoitov <ast@kernel.org> >CC: Leon Romanovsky <leon@kernel.org> >CC: Jason Gunthorpe <jgg@ziepe.ca> >CC: "Ruhl, Michael J" <michael.j.ruhl@intel.com> >CC: Steven Rostedt (VMware) <rostedt@goodmis.org> >Signed-off-by: Ira Weiny <ira.weiny@intel.com> Reviewed-by: Michael J. Ruhl <michael.j.ruhl@intel.com> > >--- >Changes from V4: > Cleanup for checkpatch > remove if check and ib_query_pkey for cleaner code > >Changes from V3: > change from dev_name to dev_index > >Changes from V2 > Change dev_name to string > Reorder fields for more efficient ring buffer utilization > > drivers/infiniband/core/mad.c | 3 ++ > include/trace/events/ib_mad.h | 67 >+++++++++++++++++++++++++++++++++++ > 2 files changed, 70 insertions(+) > >diff --git a/drivers/infiniband/core/mad.c b/drivers/infiniband/core/mad.c >index 92133b2c5072..f91f7ce4c007 100644 >--- a/drivers/infiniband/core/mad.c >+++ b/drivers/infiniband/core/mad.c >@@ -2326,6 +2326,9 @@ 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; > >+ trace_ib_mad_recv_done_handler(qp_info, wc, >+ (struct ib_mad_hdr *)recv->mad); >+ > 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 585028f17fa7..245a916bfd5a 100644 >--- a/include/trace/events/ib_mad.h >+++ b/include/trace/events/ib_mad.h >@@ -181,6 +181,73 @@ 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), >+ TP_ARGS(qp_info, wc, mad_hdr), >+ >+ 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) >+ __field(u32, dev_index) >+ __field(u16, pkey) >+ ), >+ >+ TP_fast_assign( >+ __entry->dev_index = qp_info->port_priv->device->index; >+ __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; >+ ib_query_pkey(qp_info->port_priv->device, >+ qp_info->port_priv->port_num, >+ wc->pkey_index, &__entry->pkey); >+ __entry->wc_status = wc->status; >+ ), >+ >+ TP_printk("%d:%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", >+ __entry->dev_index, __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 */ > >-- >2.20.1
On Sun, 17 Mar 2019 12:59:46 -0700 ira.weiny@intel.com wrote: > From: Ira Weiny <ira.weiny@intel.com> > > Trace received MAD details. > > CC: Hal Rosenstock <hal@dev.mellanox.co.il> > CC: Alexei Starovoitov <ast@kernel.org> > CC: Leon Romanovsky <leon@kernel.org> > CC: Jason Gunthorpe <jgg@ziepe.ca> > CC: "Ruhl, Michael J" <michael.j.ruhl@intel.com> > CC: Steven Rostedt (VMware) <rostedt@goodmis.org> > Signed-off-by: Ira Weiny <ira.weiny@intel.com> > For the tracing aspect. Reviewed-by: Steven Rostedt (VMware) <rostedt@goodmis.org> -- Steve
diff --git a/drivers/infiniband/core/mad.c b/drivers/infiniband/core/mad.c index 92133b2c5072..f91f7ce4c007 100644 --- a/drivers/infiniband/core/mad.c +++ b/drivers/infiniband/core/mad.c @@ -2326,6 +2326,9 @@ 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; + trace_ib_mad_recv_done_handler(qp_info, wc, + (struct ib_mad_hdr *)recv->mad); + 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 585028f17fa7..245a916bfd5a 100644 --- a/include/trace/events/ib_mad.h +++ b/include/trace/events/ib_mad.h @@ -181,6 +181,73 @@ 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), + TP_ARGS(qp_info, wc, mad_hdr), + + 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) + __field(u32, dev_index) + __field(u16, pkey) + ), + + TP_fast_assign( + __entry->dev_index = qp_info->port_priv->device->index; + __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; + ib_query_pkey(qp_info->port_priv->device, + qp_info->port_priv->port_num, + wc->pkey_index, &__entry->pkey); + __entry->wc_status = wc->status; + ), + + TP_printk("%d:%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", + __entry->dev_index, __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 */