Re: [PATCH] IB/MAD: Use trace struct in create_mad_addr_info() helper

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

 



On Thu, Feb 28, 2019 at 02:05:11PM -0800, 'Ira Weiny' wrote:
> From: Ira Weiny <ira.weiny@xxxxxxxxx>
> 
> Using a structure pointer is more efficient in the helper.

This failed a random config build in 0-day.  I've not looked at it in detail
yet but we should skip this follow on until I can figure out what random config
resulted in struct trace_event_raw_ib_mad_send_template from being defined
during the compile of create_mad_addr_info().

:-(

Ira

> 
> Signed-off-by: Ira Weiny <ira.weiny@xxxxxxxxx>
> ---
>  drivers/infiniband/core/mad.c | 26 ++++++++++++++------------
>  include/trace/events/ib_mad.h | 10 ++++++----
>  2 files changed, 20 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/infiniband/core/mad.c b/drivers/infiniband/core/mad.c
> index 87eff3f3f887..0a6136dded47 100644
> --- a/drivers/infiniband/core/mad.c
> +++ b/drivers/infiniband/core/mad.c
> @@ -51,11 +51,14 @@
>  #include "opa_smi.h"
>  #include "agent.h"
>  
> +#define CREATE_TRACE_POINTS
> +#include <trace/events/ib_mad.h>
> +
>  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 +68,25 @@ 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>
>  
>  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..cccb2cf4a8f7 100644
> --- a/include/trace/events/ib_mad.h
> +++ b/include/trace/events/ib_mad.h
> @@ -13,6 +13,11 @@
>  #include <linux/tracepoint.h>
>  #include <rdma/ib_mad.h>
>  
> +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);
> +
>  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 +79,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
> 



[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