[ofa-general] Re: [PATCH] core/cm: improve request message interpretation of subnet local fields

Sean Hefty mshefty at ichips.intel.com
Mon Sep 17 11:01:47 PDT 2007


> The problem arises when the active Solaris client is sending a 
> connection request to a passive OFED server instance. Solaris will set 
> the hop_limit field to 0xFF and will not expect or enable GRH routing. 
> The subsequent exchange of RC messages are therefore silently dropped 
> since one side expects GRH traffic and the other doesn't.

Is this an issue with the SM setting the hop_limit to 0xff or the active 
CM?  Currently the ib_cm sets the local_subnet value to 1 on the active 
side.  I have a patch that sets it based on the hop_limit in the path 
record.  I'm trying to determine if a more complicated solution will be 
needed for ib router support.  (Those changes can be separate if needed.)

> The active side seems to work ok for local only subnets so nothing needs 
> to be changed there.
>  
> Here is an updated patch:
>  
>     When parsing a CMA connect request message, if the subnet local is 1
>     (both nodes on same subnet), then explicitly set the hop limit in
>     the corresponding path record to 1.
>     This avoids a Global/Local mis-configuration problem with Solaris
>     infinband CMA sessions.  
> Signed-off-by: Jim L Hall <jhalljr at systemfabricworks.com 

Acked-by: Sean Hefty <sean.hefty at intel.com>

> <mailto:jhalljr at systemfabricworks.com>>
> ---
>  drivers/infiniband/core/cm.c |   10 ++++++++--
>  1 files changed, 8 insertions(+), 2 deletions(-)
>  
> diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c
> index d446998..25a77ec 100644
> --- a/drivers/infiniband/core/cm.c
> +++ b/drivers/infiniband/core/cm.c
> @@ -1095,7 +1095,10 @@ static void cm_format_paths_from_req(struct 
> cm_req_msg *req_msg,
>         primary_path->dlid = req_msg->primary_local_lid;
>         primary_path->slid = req_msg->primary_remote_lid;
>         primary_path->flow_label = cm_req_get_primary_flow_label(req_msg);
> -       primary_path->hop_limit = req_msg->primary_hop_limit;
> +       if (cm_req_get_primary_subnet_local(req_msg) == 1)
> +               primary_path->hop_limit = 1;
> +       else
> +               primary_path->hop_limit = req_msg->primary_hop_limit;
>         primary_path->traffic_class = req_msg->primary_traffic_class;
>         primary_path->reversible = 1;
>         primary_path->pkey = req_msg->pkey;
> @@ -1116,7 +1119,10 @@ static void cm_format_paths_from_req(struct 
> cm_req_msg *req_msg,
>                 alt_path->dlid = req_msg->alt_local_lid;
>                 alt_path->slid = req_msg->alt_remote_lid;
>                 alt_path->flow_label = cm_req_get_alt_flow_label(req_msg);
> -               alt_path->hop_limit = req_msg->alt_hop_limit;
> +               if (cm_req_get_alt_subnet_local(req_msg) == 1)
> +                       alt_path->hop_limit = 1;
> +               else
> +                       alt_path->hop_limit = req_msg->alt_hop_limit;
>                 alt_path->traffic_class = req_msg->alt_traffic_class;
>                 alt_path->reversible = 1;
>                 alt_path->pkey = req_msg->pkey;
>  
>  



More information about the general mailing list