[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