[ofa-general] [PATCH] infiniband/core: Enable loopback of DR SMP responses from userspace

Roland Dreier rdreier at cisco.com
Wed Sep 12 17:36:28 PDT 2007


Hal and Sean, what was the final feeling about this?  I seem to recall
some changes were requested?  Are there two independent changes mixed
up in one patch here?

 > diff --git a/drivers/infiniband/core/mad.c b/drivers/infiniband/core/mad.c
 > index 6f42877..9ec910b 100644
 > --- a/drivers/infiniband/core/mad.c
 > +++ b/drivers/infiniband/core/mad.c
 > @@ -701,7 +701,8 @@ static int handle_outgoing_dr_smp(struct ib_mad_agent_private *mad_agent_priv,
 >  	}
 >  
 >  	/* Check to post send on QP or process locally */
 > -	if (smi_check_local_smp(smp, device) == IB_SMI_DISCARD)
 > +	if (smi_check_local_smp(smp, device) == IB_SMI_DISCARD &&
 > +	    smi_check_local_resp_smp(smp, device) == IB_SMI_DISCARD)
 >  		goto out;
 >  
 >  	local = kmalloc(sizeof *local, GFP_ATOMIC);
 > @@ -754,6 +755,7 @@ static int handle_outgoing_dr_smp(struct ib_mad_agent_private *mad_agent_priv,
 >  		if (port_priv) {
 >  			mad_priv->mad.mad.mad_hdr.tid =
 >  				((struct ib_mad *)smp)->mad_hdr.tid;
 > +			memcpy(&mad_priv->mad.mad, smp, sizeof(struct ib_mad));
 >  			recv_mad_agent = find_mad_agent(port_priv,
 >  						        &mad_priv->mad.mad);
 >  		}
 > diff --git a/drivers/infiniband/core/smi.h b/drivers/infiniband/core/smi.h
 > index 1cfc298..d96fc8e 100644
 > --- a/drivers/infiniband/core/smi.h
 > +++ b/drivers/infiniband/core/smi.h
 > @@ -71,4 +71,18 @@ static inline enum smi_action smi_check_local_smp(struct ib_smp *smp,
 >  		(smp->hop_ptr == smp->hop_cnt + 1)) ?
 >  		IB_SMI_HANDLE : IB_SMI_DISCARD);
 >  }
 > +
 > +/*
 > + * Return 1 if the SMP response should be handled by the local management stack
 > + */
 > +static inline enum smi_action smi_check_local_resp_smp(struct ib_smp *smp,
 > +						       struct ib_device *device)
 > +{
 > +	/* C14-13:3 -- We're at the end of the DR segment of path */
 > +	/* C14-13:4 -- Hop Pointer == 0 -> give to SM */
 > +	return ((device->process_mad &&
 > +		ib_get_smp_direction(smp) &&
 > +		!smp->hop_ptr) ? IB_SMI_HANDLE : IB_SMI_DISCARD);
 > +}
 > +
 >  #endif	/* __SMI_H_ */



More information about the general mailing list