[ofa-general] [PATCH] IB/core - Don't modify outgoing DR SMP if first part is LID routed

Sean Hefty mshefty at ichips.intel.com
Wed Oct 17 15:07:01 PDT 2007


Ralph Campbell wrote:
> The code in handle_outgoing_dr_smp() checks to see if the directed
> route SMP has an initial LID routed part and correctly does not
> modify the hop pointer but it then proceeds to process the packet
> as if there was no initial LID routed part.  Instead, if there
> is an initial LID routed part, the packet should just be sent on
> to the destination and not processed further since it can't be
> destined for the local SM/SMA.

This makes sense to me at first read, but I need more time studying the 
spec and existing code before reaching any conclusions.  Can't a DR SMP 
be entirely LID routed, meaning that this SMP could be for the local 
node?  (I know that doesn't seem to make sense, but is it permitted?)

> @@ -691,9 +691,10 @@ static int handle_outgoing_dr_smp(struct ib_mad_agent_private *mad_agent_priv,
>  	 * If we are at the start of the LID routed part, don't update the
>  	 * hop_ptr or hop_cnt.  See section 14.2.2, Vol 1 IB spec.
>  	 */
> -	if ((ib_get_smp_direction(smp) ? smp->dr_dlid : smp->dr_slid) ==
> -	     IB_LID_PERMISSIVE &&
> -	     smi_handle_dr_smp_send(smp, device->node_type, port_num) ==
> +	if ((ib_get_smp_direction(smp) ? smp->dr_dlid : smp->dr_slid) !=
> +	     IB_LID_PERMISSIVE)
> +		goto out;

With this change, I would move the LID check up higher in the function, 
to avoid setting the port_num as a minor nit optimization.

- Sean



More information about the general mailing list