From: Ira Weiny <ira.weiny@xxxxxxxxx> Using a structure pointer is more efficient in the helper. Suggested-by: Steven Rostedt (VMware) <rostedt@xxxxxxxxxxx> Signed-off-by: Ira Weiny <ira.weiny@xxxxxxxxx> --- Changes from V1 Fix compilation when TRACEPOINTS are not configured drivers/infiniband/core/mad.c | 28 ++++++++++++++++------------ include/trace/events/ib_mad.h | 12 ++++++++---- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/drivers/infiniband/core/mad.c b/drivers/infiniband/core/mad.c index 49cec2ab1f3d..0060e066e752 100644 --- a/drivers/infiniband/core/mad.c +++ b/drivers/infiniband/core/mad.c @@ -51,11 +51,15 @@ #include "opa_smi.h" #include "agent.h" +#define CREATE_TRACE_POINTS +#include <trace/events/ib_mad.h> + +#ifdef CONFIG_TRACEPOINTS static void create_mad_addr_info(struct ib_mad_send_wr_private *mad_send_wr, - struct ib_mad_qp_info *qp_info, - u32 *dlid, u8 *sl, u16 *pkey, u32 *rqpn, - u32 *rqkey) + struct ib_mad_qp_info *qp_info, + struct trace_event_raw_ib_mad_send_template *entry) { + u16 pkey; struct ib_device *dev = qp_info->port_priv->device; u8 pnum = qp_info->port_priv->port_num; struct ib_ud_wr *wr = &mad_send_wr->send_wr; @@ -65,26 +69,26 @@ static void create_mad_addr_info(struct ib_mad_send_wr_private *mad_send_wr, rdma_query_ah(wr->ah, &attr); /* These are common */ - *sl = attr.sl; - ib_query_pkey(dev, pnum, wr->pkey_index, pkey); - *rqpn = wr->remote_qpn; - *rqkey = wr->remote_qkey; + entry->sl = attr.sl; + ib_query_pkey(dev, pnum, wr->pkey_index, &pkey); + entry->pkey = pkey; + entry->rqpn = wr->remote_qpn; + entry->rqkey = wr->remote_qkey; switch (attr.type) { case RDMA_AH_ATTR_TYPE_IB: - *dlid = attr.ib.dlid; + entry->dlid = attr.ib.dlid; break; case RDMA_AH_ATTR_TYPE_OPA: - *dlid = attr.opa.dlid; + entry->dlid = attr.opa.dlid; break; case RDMA_AH_ATTR_TYPE_ROCE: case RDMA_AH_ATTR_TYPE_UNDEFINED: - *dlid = 0; + entry->dlid = 0; break; } } -#define CREATE_TRACE_POINTS -#include <trace/events/ib_mad.h> +#endif static int mad_sendq_size = IB_MAD_QP_SEND_SIZE; static int mad_recvq_size = IB_MAD_QP_RECV_SIZE; diff --git a/include/trace/events/ib_mad.h b/include/trace/events/ib_mad.h index 7f2486535d04..59363a083ecb 100644 --- a/include/trace/events/ib_mad.h +++ b/include/trace/events/ib_mad.h @@ -13,6 +13,13 @@ #include <linux/tracepoint.h> #include <rdma/ib_mad.h> +#ifdef CONFIG_TRACEPOINTS +struct trace_event_raw_ib_mad_send_template; +static void create_mad_addr_info(struct ib_mad_send_wr_private *mad_send_wr, + struct ib_mad_qp_info *qp_info, + struct trace_event_raw_ib_mad_send_template *entry); +#endif + DECLARE_EVENT_CLASS(ib_mad_send_template, TP_PROTO(struct ib_mad_send_wr_private *wr, struct ib_mad_qp_info *qp_info), @@ -74,10 +81,7 @@ DECLARE_EVENT_CLASS(ib_mad_send_template, ((struct ib_mad_hdr *)wr->send_buf.mad)->attr_id; __entry->attr_mod = ((struct ib_mad_hdr *)wr->send_buf.mad)->attr_mod; - create_mad_addr_info(wr, qp_info, - &__entry->dlid, &__entry->sl, - &__entry->pkey, &__entry->rqpn, - &__entry->rqkey); + create_mad_addr_info(wr, qp_info, __entry); ), TP_printk("%d:%d QP%d agent %p: " \ -- 2.20.1