[ofw] opensm patches

Hal Rosenstock hal.rosenstock at gmail.com
Thu Sep 29 07:40:26 PDT 2011


Hi Stan,
On Mon, Sep 26, 2011 at 12:39 PM, Leonid Keller <leonid at mellanox.co.il>wrote:

>  They were to be taken there.****
>
> Hal knows better.****
>
> I’ve taken them several days before they went upstream.
>
>
>

I don't think this is the complete list of patches; I'm pretty sure some are
missing from this list.

Aren't you porting from the released tarball for OpenSM 3.3.11 ? If so,
that's better IMO.

-- Hal


>
>
> ** **
>
> *From:* Smith, Stan [mailto:stan.smith at intel.com]
> *Sent:* Monday, September 26, 2011 7:08 PM
> *To:* Leonid Keller
> *Cc:* ofw_list
> *Subject:* RE: opensm patches****
>
> ** **
>
> Thank you Leo.****
>
> Am I correct in understanding these patches are all in OpenSM 3.3.11
> release?****
>
> Are there additional FDR related patches elsewhere in the OFED for Windows
> stack?****
>
> ** **
>
> Stan.****
>
> ** **
>
> *From:* Leonid Keller [mailto:leonid at mellanox.co.il]
> *Sent:* Monday, September 26, 2011 1:22 AM
> *To:* Smith, Stan
> *Cc:* ofw_list
> *Subject:* FDR: opensm patches****
>
> ** **
>
> Hi Stan,****
>
> ** **
>
> I did porting of FDR-related opensm patches yet before they went upstream.
> ****
>
> I thought, maybe you will find it interesting to look at them.****
>
> ** **
>
>
> ==================================================================================================
> ****
>
> Opensm FDR-related patches, done on base of the following:****
>
> ** **
>
> [OPENSM] FDR: Changes for FDR and FDR10 support****
>
> ** **
>
> commit 480de4ae8e75b7cc6fd19f1235b8c7ed974843c0****
>
> Author: Hal Rosenstock <hal at dev.mellanox.co.il>****
>
> Date:   Wed Jul 13 19:37:01 2011 -0400****
>
>  ****
>
>     opensm: Use forward extensible and safer way to compare mkey_lmc field
> in PortInfo attribute****
>
>     ****
>
>     Rather than memcmp'ing the entire field, compare the two fields
> ignoring the****
>
>     reserved field (which may some day be used). This makes SMs coded this
> ****
>
>     way better handle such a future spec expansion.****
>
>     ****
>
>     This change also gets this code closer to supporting M_KeyProtectBits.
> ****
>
>     ****
>
>  ****
>
> commit f999195c2b80a89d70c20295bd876db253ba771c****
>
> Author: Hal Rosenstock <hal at dev.mellanox.co.il>****
>
> Date:   Mon Jul 18 07:45:28 2011 -0400****
>
>  ****
>
>     OpenSM: Add infrastructure for "full" SM PortInfo and SA PortInfoRecord
> attributes****
>
>     ****
>
>     to accomodate IBA extended link speeds****
>
>     ****
>
>     Also, some other cosmetic changes (formatting, etc.)****
>
>  ****
>
>  ****
>
> commit b8c7632fe0c8be2467bc3063610e528f8bc4daf6****
>
> Author: Hal Rosenstock <hal at dev.mellanox.co.il>****
>
> Date:   Tue Jul 26 08:31:13 2011 -0400****
>
>  ****
>
>     opensm/osm_[lid pkey]_mgr.c: Remove no longer needed memset****
>
>     ****
>
>     at the end of PortInfo as PortInfo now takes up the full size of SMP
> data****
>
>  ****
>
>  ****
>
> commit 2f32ea8526e7c14216341011be1501dcf94bdab7****
>
> Author: Hal Rosenstock <hal at dev.mellanox.co.il>****
>
> Date:   Tue Jul 26 11:23:51 2011 -0400****
>
>  ****
>
>     opensm/osm_sa_mcmember_record.c: Proper rate comparison and selection*
> ***
>
>     ****
>
>  ****
>
> commit 45111c29b93b14effbb024e5c72b0c163dfcfbb5****
>
> Author: Hal Rosenstock <hal at dev.mellanox.co.il>****
>
> Date:   Tue Jul 26 11:23:46 2011 -0400****
>
>  ****
>
>     opensm/osm_sa_path_record.c: Proper rate comparison and selection****
>
>     ****
>
>  ****
>
> commit e26fe06a942dc92de9471b110d2d8475ae3b2c2f****
>
> Author: Hal Rosenstock <hal at dev.mellanox.co.il>****
>
> Date:   Tue Jul 26 12:24:47 2011 -0400****
>
>  ****
>
>     opensm/osm_sa_multipath_record.c: Proper rate comparison and selection
> ****
>
>     ****
>
>  ****
>
> ** **
>
> commit f427600259f3c7b3ba6518b4ecadd5201e1b0fda****
>
> Author: Hal Rosenstock <hal at dev.mellanox.co.il>****
>
> Date:   Thu Jul 28 09:59:10 2011 -0400****
>
>  ****
>
>     opensm/osm_sa_class_port_info.c: Minor simplification to setting
> CapabilityMask2****
>
>  ****
>
>  ****
>
> commit cc7ff0751ff23ca6e7c9dc5f261c1fb865ca2c15****
>
> Author: Hal Rosenstock <hal at dev.mellanox.co.il>****
>
> Date:   Fri Jul 29 08:36:47 2011 -0400****
>
>  ****
>
>     opensm/osm_helper: Add rate related routines****
>
>     ****
>
>     for proper comparison and selector operation****
>
>     ****
>
>     Rate enum was never is ascending order of actual underlying rates****
>
>     but even worse with newly added extended link speeds.****
>
>  ****
>
>  ****
>
> commit a33a8af18c502cfb1162f4b36735a474dbc276c2****
>
> Author: Hal Rosenstock <hal at dev.mellanox.co.il>****
>
> Date:   Tue Aug 9 10:30:45 2011 -0400****
>
>  ****
>
>     opensm: Add extended link speeds support****
>
> ==================================================================================
> ****
>
> ** **
>
> ** **
>
> ** **
>
> ** **
>
> ** **
>
> Index:
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/include/opensm/osm_subnet.h
> ****
>
> ===================================================================****
>
> ---
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/include/opensm/osm_subnet.h
> (revision 8756)****
>
> +++
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/include/opensm/osm_subnet.h
> (revision 8757)****
>
> @@ -158,6 +158,7 @@****
>
>                 boolean_t lmc_esp0;****
>
>                 uint8_t max_op_vls;****
>
>                 uint8_t force_link_speed;****
>
> +             uint8_t force_link_speed_ext;****
>
>                 boolean_t reassign_lids;****
>
>                 boolean_t ignore_other_sm;****
>
>                 boolean_t single_thread;****
>
> Index:
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/include/opensm/osm_helper.h
> ****
>
> ===================================================================****
>
> ---
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/include/opensm/osm_helper.h
> (revision 8756)****
>
> +++
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/include/opensm/osm_helper.h
> (revision 8757)****
>
> @@ -1,6 +1,6 @@****
>
>  /*****
>
>   * Copyright (c) 2004-2009 Voltaire, Inc. All rights reserved.****
>
> - * Copyright (c) 2002-2010 Mellanox Technologies LTD. All rights reserved.
> ****
>
> + * Copyright (c) 2002-2011 Mellanox Technologies LTD. All rights reserved.
> ****
>
>   * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.****
>
>   * Copyright (c) 2009 HNR Consulting. All rights reserved.****
>
>   *****
>
> @@ -493,7 +493,7 @@****
>
>  ****
>
>  const char *osm_get_lwa_str(IN uint8_t lwa);****
>
>  ****
>
> -const char *osm_get_lsa_str(IN uint8_t lsa);****
>
> +const char *osm_get_lsa_str(IN uint8_t lsa, IN uint8_t lsea, IN uint8_t
> state);****
>
>  ****
>
>  /****f* IBA Base: Types/osm_get_sm_mgr_signal_str****
>
>  * NAME****
>
> @@ -541,5 +541,85 @@****
>
>  * SEE ALSO****
>
>  *********/****
>
>  ****
>
> +/****f* IBA Base: Types/ib_path_compare_rates****
>
> +* NAME****
>
> +*           ib_path_compare_rates****
>
> +*****
>
> +* DESCRIPTION****
>
> +*           Compares the encoded values for two path rates and****
>
> +*           return value is based on the ordered comparison of****
>
> +*           the path rates (or path rate equivalents).****
>
> +*****
>
> +* SYNOPSIS****
>
> +*/****
>
> +int ib_path_compare_rates(IN const int rate1, IN const int rate2);****
>
> +****
>
> +/*****
>
> +* PARAMETERS****
>
> +*           rate1****
>
> +*                           [in] Encoded path rate 1.****
>
> +*****
>
> +*           rate2****
>
> +*                           [in] Encoded path rate 2.****
>
> +*****
>
> +* RETURN VALUES****
>
> +*           Returns an int indicating less than (-1), equal to (0), or***
> *
>
> +*           greater than (1) rate1 as compared with rate2.****
>
> +*****
>
> +* NOTES****
>
> +*****
>
> +* SEE ALSO****
>
> +*********/****
>
> +****
>
> +/****f* IBA Base: Types/ib_path_rate_get_prev****
>
> +* NAME****
>
> +*           ib_path_rate_get_prev****
>
> +*****
>
> +* DESCRIPTION****
>
> +*           Obtains encoded rate for the rate previous to the one
> requested.****
>
> +*****
>
> +* SYNOPSIS****
>
> +*/****
>
> +int ib_path_rate_get_prev(IN const int rate);****
>
> +****
>
> +/*****
>
> +* PARAMETERS****
>
> +*           rate****
>
> +*                           [in] Encoded path rate.****
>
> +*****
>
> +* RETURN VALUES****
>
> +*           Returns an int indicating encoded rate or****
>
> +*           0 if none can be found.****
>
> +*****
>
> +* NOTES****
>
> +*****
>
> +* SEE ALSO****
>
> +*********/****
>
> +****
>
> +/****f* IBA Base: Types/ib_path_rate_get_next****
>
> +* NAME****
>
> +*           ib_path_rate_get_next****
>
> +*****
>
> +* DESCRIPTION****
>
> +*           Obtains encoded rate for the rate subsequent to the one
> requested.****
>
> +*****
>
> +* SYNOPSIS****
>
> +*/****
>
> +int ib_path_rate_get_next(IN const int rate);****
>
> +****
>
> +/*****
>
> +* PARAMETERS****
>
> +*           rate****
>
> +*                           [in] Encoded path rate.****
>
> +*****
>
> +* RETURN VALUES****
>
> +*           Returns an int indicating encoded rate or****
>
> +*           0 if none can be found.****
>
> +*****
>
> +* NOTES****
>
> +*****
>
> +* SEE ALSO****
>
> +*********/****
>
> +****
>
>  END_C_DECLS****
>
>  #endif                                                  /* _OSM_HELPER_H_
> */****
>
> Index:
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/include/opensm/osm_base.h
> ****
>
> ===================================================================****
>
> ---
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/include/opensm/osm_base.h
> (revision 8756)****
>
> +++
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/include/opensm/osm_base.h
> (revision 8757)****
>
> @@ -806,6 +806,30 @@****
>
>  #define OSM_CAP2_IS_HIERARCHY_SUPPORTED (1 << 4)****
>
>  /***********/****
>
>  ****
>
> +/****d* OpenSM: Base/OSM_CAP2_IS_FULL_PORTINFO_REC_SUPPORTED****
>
> +* Name****
>
> +*           OSM_CAP2_IS_FULL_PORTINFO_REC_SUPPORTED****
>
> +*****
>
> +* DESCRIPTION****
>
> +*           Full PortInfoRecords supported****
>
> +*****
>
> +* SYNOPSIS****
>
> +*/****
>
> +#define OSM_CAP2_IS_FULL_PORTINFO_REC_SUPPORTED (1 << 6)****
>
> +/***********/****
>
> +****
>
> +/****d* OpenSM: Base/OSM_CAP2_IS_EXTENDED_SPEEDS_SUPPORTED****
>
> +* Name****
>
> +*           OSM_CAP2_IS_EXTENDED_SPEEDS_SUPPORTED****
>
> +*****
>
> +* DESCRIPTION****
>
> +*           Extended Link Speeds supported****
>
> +*****
>
> +* SYNOPSIS****
>
> +*/****
>
> +#define OSM_CAP2_IS_EXTENDED_SPEEDS_SUPPORTED (1 << 7)****
>
> +/***********/****
>
> +****
>
>  /****d* OpenSM: Base/osm_signal_t****
>
>  * NAME****
>
>  *            osm_signal_t****
>
> Index:
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/libopensm/osm_helper.c
> ****
>
> ===================================================================****
>
> ---
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/libopensm/osm_helper.c
> (revision 8756)****
>
> +++
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/libopensm/osm_helper.c
> (revision 8757)****
>
> @@ -632,10 +632,10 @@****
>
>                           "IB_PORT_CAP_RESV13\n", &total_len ) !=
> IB_SUCCESS )****
>
>        return;****
>
>    }****
>
> -  if( p_pi->capability_mask & IB_PORT_CAP_RESV14 )****
>
> +  if( p_pi->capability_mask & IB_PORT_CAP_HAS_EXT_SPEEDS )****
>
>    {****
>
>      if( osm_dbg_do_line( &p_local, buf_size, p_prefix_str,****
>
> -                         "IB_PORT_CAP_RESV14\n", &total_len ) !=
> IB_SUCCESS )****
>
> +                         "IB_PORT_CAP_HAS_EXT_SPEEDS\n", &total_len ) !=
> IB_SUCCESS )****
>
>        return;****
>
>    }****
>
>    if( p_pi->capability_mask & IB_PORT_CAP_RESV15 )****
>
> Index:
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_sa_multipath_record.c
> ****
>
> ===================================================================****
>
> ---
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_sa_multipath_record.c
> (revision 8756)****
>
> +++
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_sa_multipath_record.c
> (revision 8757)****
>
> @@ -1,6 +1,6 @@****
>
>  /*****
>
>   * Copyright (c) 2006-2009 Voltaire, Inc. All rights reserved.****
>
> - * Copyright (c) 2002-2007 Mellanox Technologies LTD. All rights reserved.
> ****
>
> + * Copyright (c) 2002-2011 Mellanox Technologies LTD. All rights reserved.
> ****
>
>   * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.****
>
>   *****
>
>   * This software is available to you under a choice of one of two****
>
> @@ -156,11 +156,11 @@****
>
>
>       OUT osm_path_parms_t * p_parms)****
>
>  {****
>
>                 const osm_node_t *p_node;****
>
> -              const osm_physp_t *p_physp;****
>
> +             const osm_physp_t *p_physp, *p_physp0;****
>
>                 const osm_physp_t *p_src_physp;****
>
>                 const osm_physp_t *p_dest_physp;****
>
>                 const osm_prtn_t *p_prtn = NULL;****
>
> -              const ib_port_info_t *p_pi;****
>
> +             const ib_port_info_t *p_pi, *p_pi0;****
>
>                 ib_slvl_table_t *p_slvl_tbl;****
>
>                 ib_api_status_t status = IB_SUCCESS;****
>
>                 uint8_t mtu;****
>
> @@ -188,7 +188,8 @@****
>
>                 p_pi = &p_physp->port_info;****
>
>  ****
>
>                 mtu = ib_port_info_get_mtu_cap(p_pi);****
>
> -              rate = ib_port_info_compute_rate(p_pi);****
>
> +             rate = ib_port_info_compute_rate(p_pi,****
>
> +
> p_pi->capability_mask & IB_PORT_CAP_HAS_EXT_SPEEDS);****
>
>  ****
>
>                 /*****
>
>                    Mellanox Tavor device performance is better using 1K
> MTU.****
>
> @@ -360,8 +361,12 @@****
>
>                                 if (mtu > ib_port_info_get_mtu_cap(p_pi))*
> ***
>
>                                                 mtu =
> ib_port_info_get_mtu_cap(p_pi);****
>
>  ****
>
> -                              if (rate > ib_port_info_compute_rate(p_pi))
> ****
>
> -                                              rate =
> ib_port_info_compute_rate(p_pi);****
>
> +                             p_physp0 = osm_node_get_physp_ptr((osm_node_t
> *)p_node, 0);****
>
> +                             p_pi0 = &p_physp0->port_info;****
>
> +                             if (ib_path_compare_rates(rate,
> ib_port_info_compute_rate(p_pi,****
>
> +
> p_pi0->capability_mask & IB_PORT_CAP_HAS_EXT_SPEEDS)) > 0)****
>
> +                                             rate =
> ib_port_info_compute_rate(p_pi,****
>
> +
> p_pi0->capability_mask & IB_PORT_CAP_HAS_EXT_SPEEDS);****
>
>  ****
>
>                                 /*****
>
>                                    Continue with the egress port on this
> switch.****
>
> @@ -383,8 +388,12 @@****
>
>                                 if (mtu > ib_port_info_get_mtu_cap(p_pi))*
> ***
>
>                                                 mtu =
> ib_port_info_get_mtu_cap(p_pi);****
>
>  ****
>
> -                              if (rate > ib_port_info_compute_rate(p_pi))
> ****
>
> -                                              rate =
> ib_port_info_compute_rate(p_pi);****
>
> +                             p_physp0 = osm_node_get_physp_ptr((osm_node_t
> *)p_node, 0);****
>
> +                             p_pi0 = &p_physp0->port_info;****
>
> +                             if (ib_path_compare_rates(rate,
> ib_port_info_compute_rate(p_pi,****
>
> +
> p_pi0->capability_mask & IB_PORT_CAP_HAS_EXT_SPEEDS)) > 0)****
>
> +                                             rate =
> ib_port_info_compute_rate(p_pi,****
>
> +
> p_pi0->capability_mask & IB_PORT_CAP_HAS_EXT_SPEEDS);****
>
>  ****
>
>                                 if (sa->p_subn->opt.qos) {****
>
>                                                 /*****
>
> @@ -416,8 +425,10 @@****
>
>                 if (mtu > ib_port_info_get_mtu_cap(p_pi))****
>
>                                 mtu = ib_port_info_get_mtu_cap(p_pi);****
>
>  ****
>
> -              if (rate > ib_port_info_compute_rate(p_pi))****
>
> -                              rate = ib_port_info_compute_rate(p_pi);****
>
> +             if (ib_path_compare_rates(rate,
> ib_port_info_compute_rate(p_pi,****
>
> +                                             p_pi->capability_mask &
> IB_PORT_CAP_HAS_EXT_SPEEDS)) > 0)****
>
> +                             rate = ib_port_info_compute_rate(p_pi,****
>
> +                                             p_pi->capability_mask &
> IB_PORT_CAP_HAS_EXT_SPEEDS);****
>
>  ****
>
>                 OSM_LOG(sa->p_log, OSM_LOG_DEBUG,****
>
>                                 "Path min MTU = %u, min rate = %u\n", mtu,
> rate);****
>
> @@ -442,7 +453,7 @@****
>
>                                                 mtu =
> p_qos_level->mtu_limit;****
>
>  ****
>
>                                 if (p_qos_level->rate_limit_set****
>
> -                                  && (rate > p_qos_level->rate_limit))***
> *
>
> +                                             &&
> (ib_path_compare_rates(rate, p_qos_level->rate_limit) > 0))****
>
>                                                 rate =
> p_qos_level->rate_limit;****
>
>  ****
>
>                                 if (p_qos_level->sl_set) {****
>
> @@ -506,23 +517,22 @@****
>
>                                 required_rate =
> ib_multipath_rec_rate(p_mpr);****
>
>                                 switch (ib_multipath_rec_rate_sel(p_mpr)) {
> ****
>
>                                 case 0:  /* must be greater than */****
>
> -                                              if (rate <= required_rate)*
> ***
>
> +                                             if
> (ib_path_compare_rates(rate, required_rate) <= 0)****
>
>                                                                 status =
> IB_NOT_FOUND;****
>
>                                                 break;****
>
>  ****
>
>                                 case 1:  /* must be less than */****
>
> -                                              if (rate >= required_rate) {
> ****
>
> +                                             if
> (ib_path_compare_rates(rate, required_rate) >= 0) {****
>
>                                                                 /* adjust
> the rate to use the highest rate****
>
>                                                                    lower
> then the required one */****
>
> -                                                              if
> (required_rate > 2)****
>
> -
> rate = required_rate - 1;****
>
> -                                                              else****
>
> +                                                             rate =
> ib_path_rate_get_prev(required_rate);****
>
> +                                                             if (!rate)**
> **
>
>
> status = IB_NOT_FOUND;****
>
>                                                 }****
>
>                                                 break;****
>
>  ****
>
>                                 case 2:  /* exact match */****
>
> -                                              if (rate < required_rate)**
> **
>
> +                                             if
> (ib_path_compare_rates(rate, required_rate))****
>
>                                                                 status =
> IB_NOT_FOUND;****
>
>                                                 else****
>
>                                                                 rate =
> required_rate;****
>
> Index:
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_subnet.c
> ****
>
> ===================================================================****
>
> ---
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_subnet.c
> (revision 8756)****
>
> +++
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_subnet.c
> (revision 8757)****
>
> @@ -1,6 +1,6 @@****
>
>  /*****
>
>   * Copyright (c) 2004-2009 Voltaire, Inc. All rights reserved.****
>
> - * Copyright (c) 2002-2010 Mellanox Technologies LTD. All rights reserved.
> ****
>
> + * Copyright (c) 2002-2011 Mellanox Technologies LTD. All rights reserved.
> ****
>
>   * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.****
>
>   * Copyright (c) 2008 Xsigo Systems Inc.  All rights reserved.****
>
>   * Copyright (c) 2009 System Fabric Works, Inc. All rights reserved.****
>
> @@ -309,6 +309,7 @@****
>
>                 { "lmc_esp0", OPT_OFFSET(lmc_esp0), opts_parse_boolean,
> NULL, 1 },****
>
>                 { "max_op_vls", OPT_OFFSET(max_op_vls), opts_parse_uint8,
> NULL, 1 },****
>
>                 { "force_link_speed", OPT_OFFSET(force_link_speed),
> opts_parse_uint8, NULL, 1 },****
>
> +             { "force_link_speed_ext", OPT_OFFSET(force_link_speed_ext),
> opts_parse_uint8, NULL, 1 },****
>
>                 { "reassign_lids", OPT_OFFSET(reassign_lids),
> opts_parse_boolean, NULL, 1 },****
>
>                 { "ignore_other_sm", OPT_OFFSET(ignore_other_sm),
> opts_parse_boolean, NULL, 1 },****
>
>                 { "single_thread", OPT_OFFSET(single_thread),
> opts_parse_boolean, NULL, 0 },****
>
> @@ -686,6 +687,7 @@****
>
>                 p_opt->lmc_esp0 = FALSE;****
>
>                 p_opt->max_op_vls = OSM_DEFAULT_MAX_OP_VLS;****
>
>                 p_opt->force_link_speed = 15;****
>
> +             p_opt->force_link_speed_ext = 31;****
>
>                 p_opt->reassign_lids = FALSE;****
>
>                 p_opt->ignore_other_sm = FALSE;****
>
>                 p_opt->single_thread = FALSE;****
>
> @@ -1070,6 +1072,14 @@****
>
>                                 p_opts->force_link_speed =
> IB_PORT_LINK_SPEED_ENABLED_MASK;****
>
>                 }****
>
>  ****
>
> +             if ((31 < p_opts->force_link_speed_ext) ||****
>
> +                             (p_opts->force_link_speed_ext > 3 &&
> p_opts->force_link_speed_ext < 30)) {****
>
> +                             log_report(" Invalid Cached Option
> Value:force_link_speed_ext = %u:"****
>
> +                                                "Using Default:%u\n",
> p_opts->force_link_speed_ext,****
>
> +                                                31);****
>
> +                             p_opts->force_link_speed_ext = 31;****
>
> +             }****
>
> +****
>
>                 if (p_opts->max_wire_smps == 0)****
>
>                                 p_opts->max_wire_smps = 0x7FFFFFFF;****
>
>                 else if (p_opts->max_wire_smps > 0x7FFFFFFF) {****
>
> @@ -1320,6 +1330,16 @@****
>
>                                 "#    2,4,6,8-14 Reserved\n"****
>
>                                 "#    Default 15: set to
> PortInfo:LinkSpeedSupported\n"****
>
>                                 "force_link_speed %u\n\n"****
>
> +                             "# Force PortInfo:LinkSpeedExtEnabled on
> ports\n"****
>
> +                             "# If 0, don't modify
> PortInfo:LinkSpeedExtEnabled on port\n"****
>
> +                             "# Otherwise, use value for
> PortInfo:LinkSpeedExtEnabled on port\n"****
>
> +                             "# Values are (MgtWG RefID #4722)\n"****
>
> +                             "#             1: 14.0625 Gbps\n"****
>
> +                             "#             2: 25.78125 Gbps\n"****
>
> +                             "#             3: 14.0625 Gbps or 25.78125
> Gbps\n"****
>
> +                             "#             30: Disable extended link
> speeds\n"****
>
> +                             "#             Default 31: set to
> PortInfo:LinkSpeedExtSupported\n"****
>
> +                             "force_link_speed_ext %u\n\n"****
>
>                                 "# The subnet_timeout code that will be set
> for all the ports\n"****
>
>                                 "# The actual timeout is 4.096usec *
> 2^<subnet_timeout>\n"****
>
>                                 "subnet_timeout %u\n\n"****
>
> @@ -1343,6 +1363,7 @@****
>
>                                 p_opts->leaf_head_of_queue_lifetime,****
>
>                                 p_opts->max_op_vls,****
>
>                                 p_opts->force_link_speed,****
>
> +                             p_opts->force_link_speed_ext,****
>
>                                 p_opts->subnet_timeout,****
>
>                                 p_opts->local_phy_errors_threshold,****
>
>                                 p_opts->overrun_errors_threshold);****
>
> Index:
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_dump.c**
> **
>
> ===================================================================****
>
> ---
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_dump.c
> (revision 8756)****
>
> +++
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_dump.c
> (revision 8757)****
>
> @@ -1,7 +1,7 @@****
>
>  /*****
>
>   * Copyright (c) 2009 Sun Microsystems, Inc. All rights reserved.****
>
>   * Copyright (c) 2004-2009 Voltaire, Inc. All rights reserved.****
>
> - * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
> ****
>
> + * Copyright (c) 2002-2011 Mellanox Technologies LTD. All rights reserved.
> ****
>
>   * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.****
>
>   *****
>
>   * This software is available to you under a choice of one of two****
>
> @@ -365,6 +365,7 @@****
>
>                 osm_node_t *p_nbnode;****
>
>                 osm_physp_t *p_physp, *p_default_physp, *p_rphysp;****
>
>                 uint8_t link_speed_act;****
>
> +             char *link_speed_act_str;****
>
>  ****
>
>                 if (!p_node->node_info.num_ports)****
>
>                                 return;****
>
> @@ -441,7 +442,26 @@****
>
>                                 port_state =
> ib_port_info_get_port_state(&p_physp->port_info);****
>
>                                 link_speed_act =****
>
>
> ib_port_info_get_link_speed_active(&p_physp->port_info);****
>
> +                             if (link_speed_act ==
> IB_LINK_SPEED_ACTIVE_2_5)****
>
> +                                             link_speed_act_str = "2.5";*
> ***
>
> +                             else if (link_speed_act ==
> IB_LINK_SPEED_ACTIVE_5)****
>
> +                                             link_speed_act_str = "5";***
> *
>
> +                             else if (link_speed_act ==
> IB_LINK_SPEED_ACTIVE_10)****
>
> +                                             link_speed_act_str = "10";**
> **
>
> +                             else****
>
> +                                             link_speed_act_str = "??";**
> **
>
>  ****
>
> +                             if
> (p_default_physp->port_info.capability_mask & IB_PORT_CAP_HAS_EXT_SPEEDS) {
> ****
>
> +                                             link_speed_act =****
>
> +
> ib_port_info_get_link_speed_ext_active(&p_physp->port_info);****
>
> +                                             if (link_speed_act ==
> IB_LINK_SPEED_EXT_ACTIVE_14)****
>
> +
> link_speed_act_str = "14";****
>
> +                                             else if (link_speed_act ==
> IB_LINK_SPEED_EXT_ACTIVE_25)****
>
> +
> link_speed_act_str = "25";****
>
> +                                             else if (link_speed_act !=
> IB_LINK_SPEED_EXT_ACTIVE_NONE)****
>
> +
> link_speed_act_str = "??";****
>
> +                             }****
>
> +****
>
>                                 fprintf(file, "PHY=%s LOG=%s SPD=%s\n",***
> *
>
>
> p_physp->port_info.link_width_active == 1 ? "1x" :****
>
>
> p_physp->port_info.link_width_active == 2 ? "4x" :****
>
> @@ -450,9 +470,7 @@****
>
>                                                 port_state ==
> IB_LINK_ACTIVE ? "ACT" :****
>
>                                                 port_state == IB_LINK_ARMED
> ? "ARM" :****
>
>                                                 port_state == IB_LINK_INIT
> ? "INI" : "DWN",****
>
> -                                              link_speed_act == 1 ? "2.5"
> :****
>
> -                                              link_speed_act == 2 ? "5" :
> ****
>
> -                                              link_speed_act == 4 ? "10" :
> "??");****
>
> +                                             link_speed_act_str);****
>
>                 }****
>
>  }****
>
>  ****
>
> @@ -511,7 +529,9 @@****
>
>
> (ib_port_info_get_neighbor_mtu(p_pi)),****
>
>
> osm_get_lwa_str(p_pi->link_width_active),****
>
>
> osm_get_lsa_str****
>
> -
> (ib_port_info_get_link_speed_active(p_pi)));****
>
> +
> (ib_port_info_get_link_speed_active(p_pi),****
>
> +
> ib_port_info_get_link_speed_ext_active(p_pi),****
>
> +
> ib_port_info_get_port_state(p_pi)));****
>
>                                 else****
>
>                                                 fprintf(file, "      :
> :     ");****
>
>  ****
>
> Index:
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_helper.c
> ****
>
> ===================================================================****
>
> ---
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_helper.c
> (revision 8756)****
>
> +++
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_helper.c
> (revision 8757)****
>
> @@ -1,6 +1,6 @@****
>
>  /*****
>
>   * Copyright (c) 2004-2009 Voltaire, Inc. All rights reserved.****
>
> - * Copyright (c) 2002-2009 Mellanox Technologies LTD. All rights reserved.
> ****
>
> + * Copyright (c) 2002-2011 Mellanox Technologies LTD. All rights reserved.
> ****
>
>   * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.****
>
>   * Copyright (c) 2009 HNR Consulting. All rights reserved.****
>
>   * Copyright (c) 2009 Sun Microsystems, Inc. All rights reserved.****
>
> @@ -439,6 +439,27 @@****
>
>  ****
>
>  #define OSM_SA_ATTR_STR_UNKNOWN_VAL 0xF4****
>
>  ****
>
> +static int ordered_rates[] = {****
>
> +             0, 0,        /*  0, 1 - reserved */****
>
> +             1,            /*  2 - 2.5 Gbps */****
>
> +             3,            /*  3 - 10  Gbps */****
>
> +             6,            /*  4 - 30  Gbps */****
>
> +             2,            /*  5 - 5   Gbps */****
>
> +             5,            /*  6 - 20  Gbps */****
>
> +             8,            /*  7 - 40  Gbps */****
>
> +             9,            /*  8 - 60  Gbps */****
>
> +             11,          /*  9 - 80  Gbps */****
>
> +             12,          /* 10 - 120 Gbps */****
>
> +             4,            /* 11 -  14 Gbps (17 Gbps equiv) */****
>
> +             10,          /* 12 -  56 Gbps (68 Gbps equiv) */****
>
> +             14,          /* 13 - 112 Gbps (136 Gbps equiv) */****
>
> +             15,          /* 14 - 158 Gbps (204 Gbps equiv) */****
>
> +             7,            /* 15 -  25 Gbps (31.25 Gbps equiv) */****
>
> +             13,          /* 16 - 100 Gbps (125 Gbps equiv) */****
>
> +             16,          /* 17 - 200 Gbps (250 Gbps equiv) */****
>
> +             17           /* 18 - 300 Gbps (375 Gbps equiv) */****
>
> +};****
>
> +****
>
>  static int sprint_uint8_arr(char *buf, size_t size,****
>
>                                                     const uint8_t * arr,
> size_t len)****
>
>  {****
>
> @@ -653,9 +674,9 @@****
>
>                                                                 &total_len)
> != IB_SUCCESS)****
>
>                                                 return;****
>
>                 }****
>
> -              if (p_pi->capability_mask & IB_PORT_CAP_RESV14) {****
>
> +             if (p_pi->capability_mask & IB_PORT_CAP_HAS_EXT_SPEEDS) {***
> *
>
>                                 if (dbg_do_line(&p_local, buf_size,
> p_prefix_str,****
>
> -
> "IB_PORT_CAP_RESV14\n",****
>
> +
> "IB_PORT_CAP_HAS_EXT_SPEEDS\n",****
>
>                                                                 &total_len)
> != IB_SUCCESS)****
>
>                                                 return;****
>
>                 }****
>
> @@ -773,6 +794,7 @@****
>
>  ****
>
>                                 osm_log(p_log, log_level,****
>
>                                                 "PortInfo dump:\n"****
>
> +****
>
>                                                 "\t\t\t\tport
> number.............%u\n"****
>
>
> "\t\t\t\tnode_guid...............0x%016" PRIx64 "\n"****
>
>
> "\t\t\t\tport_guid...............0x%016" PRIx64 "\n"****
>
> @@ -811,7 +833,10 @@****
>
>
> "\t\t\t\tresp_time_value.........0x%X\n"****
>
>
> "\t\t\t\terror_threshold.........0x%X\n"****
>
>
> "\t\t\t\tmax_credit_hint.........0x%X\n"****
>
> -
> "\t\t\t\tlink_round_trip_latency.0x%X\n",****
>
> +
> "\t\t\t\tlink_round_trip_latency.0x%X\n"****
>
> +
> "\t\t\t\tlink_speed_ext_active....0x%X\n"****
>
> +
> "\t\t\t\tlink_speed_ext_supported.0x%X\n"****
>
> +
> "\t\t\t\tlink_speed_ext_enabled...0x%X\n",****
>
>                                                 port_num,
> cl_ntoh64(node_guid), cl_ntoh64(port_guid),****
>
>                                                 cl_ntoh64(p_pi->m_key),
> cl_ntoh64(p_pi->subnet_prefix),****
>
>                                                 cl_ntoh16(p_pi->base_lid),
> ****
>
> @@ -834,9 +859,13 @@****
>
>
> cl_ntoh16(p_pi->q_key_violations), p_pi->guid_cap,****
>
>
> ib_port_info_get_client_rereg(p_pi),****
>
>
> ib_port_info_get_mcast_pkey_trap_suppress(p_pi),****
>
> -
> ib_port_info_get_timeout(p_pi), p_pi->resp_time_value,****
>
> +
> ib_port_info_get_timeout(p_pi),****
>
> +
> ib_port_info_get_resp_time_value(p_pi),****
>
>                                                 p_pi->error_threshold,
> cl_ntoh16(p_pi->max_credit_hint),****
>
> -
> cl_ntoh32(p_pi->link_rt_latency));****
>
> +
> cl_ntoh32(p_pi->link_rt_latency),****
>
> +
> ib_port_info_get_link_speed_ext_active(p_pi),****
>
> +
> ib_port_info_get_link_speed_ext_sup(p_pi),****
>
> +
> p_pi->link_speed_ext_enabled);****
>
>  ****
>
>                                 /*  show the capabilities mask */****
>
>                                 if (p_pi->capability_mask) {****
>
> @@ -858,43 +887,51 @@****
>
>                                 osm_log(p_log, log_level,****
>
>                                                 "PortInfo Record dump:\n"*
> ***
>
>                                                 "\t\t\t\tRID\n"****
>
> -
> "\t\t\t\tEndPortLid..............%u\n"****
>
> -
> "\t\t\t\tPortNum.................%u\n"****
>
> -
> "\t\t\t\tOptions.................0x%X\n"****
>
> +
> "\t\t\t\tEndPortLid...............%u\n"****
>
> +
> "\t\t\t\tPortNum..................%u\n"****
>
> +
> "\t\t\t\tOptions..................0x%X\n"****
>
>                                                 "\t\t\t\tPortInfo dump:\n"
> ****
>
> -
> "\t\t\t\tm_key...................0x%016" PRIx64 "\n"****
>
> -
> "\t\t\t\tsubnet_prefix...........0x%016" PRIx64 "\n"****
>
> -
> "\t\t\t\tbase_lid................%u\n"****
>
> -
> "\t\t\t\tmaster_sm_base_lid......%u\n"****
>
> -
> "\t\t\t\tcapability_mask.........0x%X\n"****
>
> -
> "\t\t\t\tdiag_code...............0x%X\n"****
>
> -
> "\t\t\t\tm_key_lease_period......0x%X\n"****
>
> -
> "\t\t\t\tlocal_port_num..........%u\n"****
>
> -
> "\t\t\t\tlink_width_enabled......0x%X\n"****
>
> -
> "\t\t\t\tlink_width_supported....0x%X\n"****
>
> -
> "\t\t\t\tlink_width_active.......0x%X\n"****
>
> -
> "\t\t\t\tlink_speed_supported....0x%X\n"****
>
> -
> "\t\t\t\tport_state..............%s\n"****
>
> -
> "\t\t\t\tstate_info2.............0x%X\n"****
>
> -
> "\t\t\t\tm_key_protect_bits......0x%X\n"****
>
> -
> "\t\t\t\tlmc.....................0x%X\n"****
>
> -
> "\t\t\t\tlink_speed..............0x%X\n"****
>
> -
> "\t\t\t\tmtu_smsl................0x%X\n"****
>
> -
> "\t\t\t\tvl_cap_init_type........0x%X\n"****
>
> -
> "\t\t\t\tvl_high_limit...........0x%X\n"****
>
> -
> "\t\t\t\tvl_arb_high_cap.........0x%X\n"****
>
> -
> "\t\t\t\tvl_arb_low_cap..........0x%X\n"****
>
> -
> "\t\t\t\tinit_rep_mtu_cap........0x%X\n"****
>
> -
> "\t\t\t\tvl_stall_life...........0x%X\n"****
>
> -
> "\t\t\t\tvl_enforce..............0x%X\n"****
>
> -
> "\t\t\t\tm_key_violations........0x%X\n"****
>
> -
> "\t\t\t\tp_key_violations........0x%X\n"****
>
> -
> "\t\t\t\tq_key_violations........0x%X\n"****
>
> -
> "\t\t\t\tguid_cap................0x%X\n"****
>
> -
> "\t\t\t\tsubnet_timeout..........0x%X\n"****
>
> -
> "\t\t\t\tresp_time_value.........0x%X\n"****
>
> -
> "\t\t\t\terror_threshold.........0x%X\n",****
>
> +
> "\t\t\t\tm_key....................0x%016" PRIx64 "\n"****
>
> +
> "\t\t\t\tsubnet_prefix............0x%016" PRIx64 "\n"****
>
> +
> "\t\t\t\tbase_lid.................%u\n"****
>
> +
> "\t\t\t\tmaster_sm_base_lid.......%u\n"****
>
> +
> "\t\t\t\tcapability_mask..........0x%X\n"****
>
> +
> "\t\t\t\tdiag_code................0x%X\n"****
>
> +
> "\t\t\t\tm_key_lease_period.......0x%X\n"****
>
> +
> "\t\t\t\tlocal_port_num...........%u\n"****
>
> +
> "\t\t\t\tlink_width_enabled.......0x%X\n"****
>
> +
> "\t\t\t\tlink_width_supported.....0x%X\n"****
>
> +
> "\t\t\t\tlink_width_active........0x%X\n"****
>
> +
> "\t\t\t\tlink_speed_supported.....0x%X\n"****
>
> +
> "\t\t\t\tport_state...............%s\n"****
>
> +
> "\t\t\t\tstate_info2..............0x%X\n"****
>
> +
> "\t\t\t\tm_key_protect_bits.......0x%X\n"****
>
> +
> "\t\t\t\tlmc......................0x%X\n"****
>
> +
> "\t\t\t\tlink_speed...............0x%X\n"****
>
> +
> "\t\t\t\tmtu_smsl.................0x%X\n"****
>
> +
> "\t\t\t\tvl_cap_init_type.........0x%X\n"****
>
> +
> "\t\t\t\tvl_high_limit............0x%X\n"****
>
> +
> "\t\t\t\tvl_arb_high_cap..........0x%X\n"****
>
> +
> "\t\t\t\tvl_arb_low_cap...........0x%X\n"****
>
> +
> "\t\t\t\tinit_rep_mtu_cap.........0x%X\n"****
>
> +
> "\t\t\t\tvl_stall_life............0x%X\n"****
>
> +
> "\t\t\t\tvl_enforce...............0x%X\n"****
>
> +
> "\t\t\t\tm_key_violations.........0x%X\n"****
>
> +
> "\t\t\t\tp_key_violations.........0x%X\n"****
>
> +
> "\t\t\t\tq_key_violations.........0x%X\n"****
>
> +
> "\t\t\t\tguid_cap.................0x%X\n"****
>
> +
> "\t\t\t\tclient_reregister........0x%X\n"****
>
> +
> "\t\t\t\tmcast_pkey_trap_suppr....0x%X\n"****
>
> +
> "\t\t\t\tsubnet_timeout...........0x%X\n"****
>
> +
> "\t\t\t\tresp_time_value..........0x%X\n"****
>
> +
> "\t\t\t\terror_threshold..........0x%X\n"****
>
> +
> "\t\t\t\tmax_credit_hint..........0x%X\n"****
>
> +
> "\t\t\t\tlink_round_trip_latency..0x%X\n"****
>
> +
> "\t\t\t\tlink_speed_ext_active....0x%X\n"****
>
> +
> "\t\t\t\tlink_speed_ext_supported.0x%X\n"****
>
> +
> "\t\t\t\tlink_speed_ext_enabled...0x%X\n",****
>
>                                                 cl_ntoh16(p_pir->lid),
> p_pir->port_num, p_pir->options,****
>
> +                                             cl_ntoh16(p_pir->lid),
> p_pir->port_num, p_pir->options,****
>
>                                                 cl_ntoh64(p_pi->m_key),
> cl_ntoh64(p_pi->subnet_prefix),****
>
>                                                 cl_ntoh16(p_pi->base_lid),
> ****
>
>
> cl_ntoh16(p_pi->master_sm_base_lid),****
>
> @@ -914,8 +951,13 @@****
>
>
> cl_ntoh16(p_pi->m_key_violations),****
>
>
> cl_ntoh16(p_pi->p_key_violations),****
>
>
> cl_ntoh16(p_pi->q_key_violations), p_pi->guid_cap,****
>
> -
> ib_port_info_get_timeout(p_pi), p_pi->resp_time_value,****
>
> -                                              p_pi->error_threshold);****
>
> +
> ib_port_info_get_timeout(p_pi),****
>
> +
> ib_port_info_get_resp_time_value(p_pi),****
>
> +                                             p_pi->error_threshold,
> cl_ntoh16(p_pi->max_credit_hint),****
>
> +
> cl_ntoh32(p_pi->link_rt_latency),****
>
> +
> ib_port_info_get_link_speed_ext_active(p_pi),****
>
> +
> ib_port_info_get_link_speed_ext_sup(p_pi),****
>
> +
> p_pi->link_speed_ext_enabled);****
>
>  ****
>
>                                 /*  show the capabilities mask */****
>
>                                 if (p_pi->capability_mask) {****
>
> @@ -2195,19 +2237,28 @@****
>
>  }****
>
>  ****
>
>  static const char *lsa_str_fixed_width[] = {****
>
> -              "???",****
>
> +             "Ext",****
>
>                 "2.5",****
>
>                 "5  ",****
>
>                 "???",****
>
>                 "10 "****
>
>  };****
>
>  ****
>
> -const char *osm_get_lsa_str(IN uint8_t lsa)****
>
> +static const char *lsea_str_fixed_width[] = {****
>
> +             "Std",****
>
> +             "14 ",****
>
> +             "25 "****
>
> +};****
>
> +****
>
> +const char *osm_get_lsa_str(IN uint8_t lsa, IN uint8_t lsea, IN uint8_t
> state)****
>
>  {****
>
> -              if (lsa > 4)****
>
> -                              return lsa_str_fixed_width[0];****
>
> -              else****
>
> +             if (lsa > IB_LINK_SPEED_ACTIVE_10)****
>
> +                             return lsa_str_fixed_width[3];****
>
> +             if (lsea == IB_LINK_SPEED_EXT_ACTIVE_NONE)****
>
>                                 return lsa_str_fixed_width[lsa];****
>
> +             if (lsea > IB_LINK_SPEED_EXT_ACTIVE_25)****
>
> +                             return lsa_str_fixed_width[3];****
>
> +             return lsea_str_fixed_width[lsea];****
>
>  }****
>
>  ****
>
>  static const char *sm_mgr_signal_str[] = {****
>
> @@ -2246,3 +2297,64 @@****
>
>                     sm_mgr_state_str[state] :****
>
>                     sm_mgr_state_str[ARR_SIZE(sm_mgr_state_str) - 1];****
>
>  }****
>
> +****
>
> +****
>
> +int ib_path_compare_rates(IN const int rate1, IN const int rate2)****
>
> +{****
>
> +             int orate1 = 0, orate2 = 0;****
>
> +****
>
> +             CL_ASSERT(rate1 >= IB_MIN_RATE && rate1 <= IB_MAX_RATE);****
>
> +             CL_ASSERT(rate2 >= IB_MIN_RATE && rate2 <= IB_MAX_RATE);****
>
> +****
>
> +             if (rate1 <= IB_MAX_RATE)****
>
> +                             orate1 = ordered_rates[rate1];****
>
> +             if (rate2 <= IB_MAX_RATE)****
>
> +                             orate2 = ordered_rates[rate2];****
>
> +             if (orate1 < orate2)****
>
> +                             return -1;****
>
> +             if (orate1 == orate2)****
>
> +                             return 0;****
>
> +             return 1;****
>
> +}****
>
> +****
>
> +static int find_ordered_rate(IN const int rate)****
>
> +{****
>
> +             int i;****
>
> +****
>
> +             for (i = IB_MIN_RATE; i <= IB_MAX_RATE; i++) {****
>
> +                             if (ordered_rates[i] == rate)****
>
> +                                             return i;****
>
> +             }****
>
> +             return 0;****
>
> +}****
>
> +****
>
> +int ib_path_rate_get_prev(IN const int rate)****
>
> +{****
>
> +             int orate;****
>
> +****
>
> +             CL_ASSERT(rate >= IB_MIN_RATE && rate <= IB_MAX_RATE);****
>
> +****
>
> +             if (rate <= IB_MIN_RATE)****
>
> +                             return 0;****
>
> +             if (rate > IB_MAX_RATE)****
>
> +                             return 0;****
>
> +             orate = ordered_rates[rate];****
>
> +             orate--;****
>
> +             return find_ordered_rate(orate);****
>
> +}****
>
> +****
>
> +int ib_path_rate_get_next(IN const int rate)****
>
> +{****
>
> +             int orate;****
>
> +****
>
> +             CL_ASSERT(rate >= IB_MIN_RATE && rate <= IB_MAX_RATE);****
>
> +****
>
> +             if (rate < IB_MIN_RATE)****
>
> +                             return 0;****
>
> +             if (rate >= IB_MAX_RATE)****
>
> +                             return 0;****
>
> +             orate = ordered_rates[rate];****
>
> +             orate++;****
>
> +             return find_ordered_rate(orate);****
>
> +}****
>
> +****
>
> Index:
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_sa_portinfo_record.c
> ****
>
> ===================================================================****
>
> ---
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_sa_portinfo_record.c
> (revision 8756)****
>
> +++
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_sa_portinfo_record.c
> (revision 8757)****
>
> @@ -1,6 +1,6 @@****
>
>  /*****
>
>   * Copyright (c) 2004-2009 Voltaire, Inc. All rights reserved.****
>
> - * Copyright (c) 2002-2007 Mellanox Technologies LTD. All rights reserved.
> ****
>
> + * Copyright (c) 2002-2011 Mellanox Technologies LTD. All rights reserved.
> ****
>
>   * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.****
>
>   *****
>
>   * This software is available to you under a choice of one of two****
>
> @@ -74,10 +74,12 @@****
>
>  ****
>
>  static ib_api_status_t pir_rcv_new_pir(IN osm_sa_t * sa,****
>
>                                                                        IN
> const osm_physp_t * p_physp,****
>
> -                                                                     IN
> cl_qlist_t * p_list,****
>
> +
>    IN osm_pir_search_ctxt_t * p_ctxt,****
>
>                                                                        IN
> ib_net16_t const lid)****
>
>  {****
>
>                 osm_pir_item_t *p_rec_item;****
>
> +             ib_port_info_t *p_pi;****
>
> +             osm_physp_t *p_physp0;****
>
>                 ib_api_status_t status = IB_SUCCESS;****
>
>  ****
>
>                 OSM_LOG_ENTER(sa->p_log);****
>
> @@ -100,9 +102,35 @@****
>
>  ****
>
>                 p_rec_item->rec.lid = lid;****
>
>                 p_rec_item->rec.port_info = p_physp->port_info;****
>
> +             if (p_ctxt->comp_mask & IB_PIR_COMPMASK_OPTIONS)****
>
> +                             p_rec_item->rec.options =
> p_ctxt->p_rcvd_rec->options;****
>
> +             if ((p_ctxt->comp_mask & IB_PIR_COMPMASK_OPTIONS) == 0 ||***
> *
>
> +                             (p_ctxt->p_rcvd_rec->options & 0x80) == 0) {
> ****
>
> +                             /* Does requested port have an extended link
> speed active ? */****
>
> +                             if (osm_node_get_type(p_physp->p_node) ==***
> *
>
> +                                             IB_NODE_TYPE_SWITCH) {****
>
> +                                             p_physp0 =
> osm_node_get_physp_ptr(p_ctxt->p_req_physp->p_node, 0);****
>
> +                                             p_pi = &p_physp0->port_info;
> ****
>
> +                             } else****
>
> +                                             p_pi = (ib_port_info_t *)
> &p_physp->port_info;****
>
> +                             if ((p_pi->capability_mask &
> IB_PORT_CAP_HAS_EXT_SPEEDS) > 0) {****
>
> +                                             if
> (ib_port_info_get_link_speed_ext_active(&p_physp->port_info)) {****
>
> +                                                             /* Add QDR
> bits to original link speed components */****
>
> +                                                             p_pi =
> &p_rec_item->rec.port_info;****
>
> +
> ib_port_info_set_link_speed_enabled(p_pi,****
>
> +
> ib_port_info_get_link_speed_enabled(p_pi) | IB_LINK_SPEED_ACTIVE_10);****
>
> +
> p_pi->state_info1 =****
>
> +
> (uint8_t) ((p_pi->state_info1 & IB_PORT_STATE_MASK) |****
>
> +
>    (ib_port_info_get_link_speed_sup(p_pi) | IB_LINK_SPEED_ACTIVE_10) <<
> IB_PORT_LINK_SPEED_SHIFT);****
>
> +
> p_pi->link_speed =****
>
> +
> (uint8_t) ((p_pi->link_speed & IB_PORT_LINK_SPEED_ENABLED_MASK) |****
>
> +
>    (ib_port_info_get_link_speed_active(p_pi) | IB_LINK_SPEED_ACTIVE_10) <<
> IB_PORT_LINK_SPEED_SHIFT);****
>
> +                                             }****
>
> +                             }****
>
> +             }****
>
>                 p_rec_item->rec.port_num = osm_physp_get_port_num(p_physp);
> ****
>
>  ****
>
> -              cl_qlist_insert_tail(p_list, &p_rec_item->list_item);****
>
> +             cl_qlist_insert_tail(p_ctxt->p_list, &p_rec_item->list_item);
> ****
>
>  ****
>
>  Exit:****
>
>                 OSM_LOG_EXIT(sa->p_log);****
>
> @@ -147,7 +175,7 @@****
>
>                                                 goto Exit;****
>
>                 }****
>
>  ****
>
> -              pir_rcv_new_pir(sa, p_physp, p_ctxt->p_list,
> cl_hton16(base_lid_ho));****
>
> +             pir_rcv_new_pir(sa, p_physp, p_ctxt, cl_hton16(base_lid_ho));
> ****
>
>  ****
>
>  Exit:****
>
>                 OSM_LOG_EXIT(sa->p_log);****
>
> @@ -160,6 +188,8 @@****
>
>                 ib_net64_t comp_mask;****
>
>                 const ib_port_info_t *p_comp_pi;****
>
>                 const ib_port_info_t *p_pi;****
>
> +             const osm_physp_t * p_physp0;****
>
> +             ib_net32_t cap_mask;****
>
>  ****
>
>                 OSM_LOG_ENTER(sa->p_log);****
>
>  ****
>
> @@ -373,6 +403,30 @@****
>
>                                                 goto Exit;****
>
>                 }****
>
>  ****
>
> +             if (osm_node_get_type(p_physp->p_node) ==
> IB_NODE_TYPE_SWITCH) {****
>
> +                             p_physp0 =
> osm_node_get_physp_ptr(p_physp->p_node, 0);****
>
> +                             cap_mask =
> p_physp0->port_info.capability_mask;****
>
> +             } else****
>
> +                             cap_mask = p_pi->capability_mask;****
>
> +             if (comp_mask & IB_PIR_COMPMASK_LINKSPDEXTACT) {****
>
> +                             if (((cap_mask & IB_PORT_CAP_HAS_EXT_SPEEDS)
> > 0) &&****
>
> +
> (ib_port_info_get_link_speed_ext_active(p_comp_pi) !=****
>
> +
> ib_port_info_get_link_speed_ext_active(p_pi)))****
>
> +                                             goto Exit;****
>
> +             }****
>
> +             if (comp_mask & IB_PIR_COMPMASK_LINKSPDEXTSUPP) {****
>
> +                             if (((cap_mask & IB_PORT_CAP_HAS_EXT_SPEEDS)
> > 0) &&****
>
> +
> (ib_port_info_get_link_speed_ext_sup(p_comp_pi) !=****
>
> +
> ib_port_info_get_link_speed_ext_sup(p_pi)))****
>
> +                                             goto Exit;****
>
> +             }****
>
> +             if (comp_mask & IB_PIR_COMPMASK_LINKSPDEXTENAB) {****
>
> +                             if (((cap_mask & IB_PORT_CAP_HAS_EXT_SPEEDS)
> > 0) &&****
>
> +
> (ib_port_info_get_link_speed_ext_enabled(p_comp_pi) !=****
>
> +
> ib_port_info_get_link_speed_ext_enabled(p_pi)))****
>
> +                                             goto Exit;****
>
> +             }****
>
> +****
>
>                 sa_pir_create(sa, p_physp, p_ctxt);****
>
>  ****
>
>  Exit:****
>
> Index:
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_sa_class_port_info.c
> ****
>
> ===================================================================****
>
> ---
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_sa_class_port_info.c
> (revision 8756)****
>
> +++
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_sa_class_port_info.c
> (revision 8757)****
>
> @@ -1,6 +1,6 @@****
>
>  /*****
>
>   * Copyright (c) 2004-2008 Voltaire, Inc. All rights reserved.****
>
> - * Copyright (c) 2002-2007 Mellanox Technologies LTD. All rights reserved.
> ****
>
> + * Copyright (c) 2002-2011 Mellanox Technologies LTD. All rights reserved.
> ****
>
>   * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.****
>
>   *****
>
>   * This software is available to you under a choice of one of two****
>
> @@ -73,6 +73,7 @@****
>
>                 ib_sa_mad_t *p_resp_sa_mad;****
>
>                 ib_class_port_info_t *p_resp_cpi;****
>
>                 ib_gid_t zero_gid;****
>
> +             uint32_t cap_mask2;****
>
>                 uint8_t rtv;****
>
>  ****
>
>                 OSM_LOG_ENTER(sa->p_log);****
>
> @@ -156,11 +157,12 @@****
>
>                 p_resp_cpi->cap_mask = OSM_CAP_IS_SUBN_GET_SET_NOTICE_SUP |
> ****
>
>                     OSM_CAP_IS_PORT_INFO_CAPMASK_MATCH_SUPPORTED;****
>
>  #endif****
>
> +             cap_mask2 = OSM_CAP2_IS_MCAST_TOP_SUPPORTED |****
>
> +
> OSM_CAP2_IS_FULL_PORTINFO_REC_SUPPORTED |****
>
> +
> OSM_CAP2_IS_EXTENDED_SPEEDS_SUPPORTED;****
>
>                 if (sa->p_subn->opt.qos)****
>
> -                              ib_class_set_cap_mask2(p_resp_cpi,
> OSM_CAP2_IS_QOS_SUPPORTED |****
>
> -
>    OSM_CAP2_IS_MCAST_TOP_SUPPORTED);****
>
> -              else****
>
> -                              ib_class_set_cap_mask2(p_resp_cpi,
> OSM_CAP2_IS_MCAST_TOP_SUPPORTED);****
>
> +                             cap_mask2 |= OSM_CAP2_IS_QOS_SUPPORTED;****
>
> +             ib_class_set_cap_mask2(p_resp_cpi, cap_mask2);****
>
>  ****
>
>                 if (!sa->p_subn->opt.disable_multicast)****
>
>                                 p_resp_cpi->cap_mask |=
> OSM_CAP_IS_UD_MCAST_SUP;****
>
> Index:
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_link_mgr.c
> ****
>
> ===================================================================****
>
> ---
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_link_mgr.c
> (revision 8756)****
>
> +++
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_link_mgr.c
> (revision 8757)****
>
> @@ -1,6 +1,6 @@****
>
>  /*****
>
>   * Copyright (c) 2004-2009 Voltaire, Inc. All rights reserved.****
>
> - * Copyright (c) 2002-2007 Mellanox Technologies LTD. All rights reserved.
> ****
>
> + * Copyright (c) 2002-2011 Mellanox Technologies LTD. All rights reserved.
> ****
>
>   * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.****
>
>   * Copyright (c) 2009 Sun Microsystems, Inc. All rights reserved.****
>
>   *****
>
> @@ -95,8 +95,10 @@****
>
>                 ib_api_status_t status;****
>
>                 uint8_t port_num, mtu, op_vls, smsl = OSM_DEFAULT_SL;****
>
>                 boolean_t esp0 = FALSE, send_set = FALSE;****
>
> -              osm_physp_t *p_remote_physp;****
>
> +             osm_physp_t *p_remote_physp, *physp0;****
>
> +             int qdr_change = 0;****
>
>                 int ret = 0;****
>
> +             ib_net32_t attr_mod, cap_mask;****
>
>  ****
>
>                 OSM_LOG_ENTER(sm->p_log);****
>
>  ****
>
> @@ -231,16 +233,14 @@****
>
>
> sizeof(p_pi->m_key_lease_period)))****
>
>                                                                 send_set =
> TRUE;****
>
>  ****
>
> -                                              if (esp0 == FALSE)****
>
> -
> p_pi->mkey_lmc = sm->p_subn->opt.lmc;****
>
> -                                              else {****
>
> -                                                              if
> (sm->p_subn->opt.lmc_esp0)****
>
> -
> p_pi->mkey_lmc = sm->p_subn->opt.lmc;****
>
> -                                                              else****
>
> -
> p_pi->mkey_lmc = 0;****
>
> -                                              }****
>
> -                                              if (memcmp(&p_pi->mkey_lmc,
> &p_old_pi->mkey_lmc,****
>
> -
> sizeof(p_pi->mkey_lmc)))****
>
> +                                             /* M_KeyProtectBits are
> currently always zero */****
>
> +                                             p_pi->mkey_lmc = 0;****
>
> +                                             if (esp0 == FALSE ||
> sm->p_subn->opt.lmc_esp0)****
>
> +
> ib_port_info_set_lmc(p_pi, sm->p_subn->opt.lmc);****
>
> +                                             if
> (ib_port_info_get_lmc(p_old_pi) !=****
>
> +
> ib_port_info_get_lmc(p_pi) ||****
>
> +
> ib_port_info_get_mpb(p_old_pi) !=****
>
> +
> ib_port_info_get_mpb(p_pi))****
>
>                                                                 send_set =
> TRUE;****
>
>  ****
>
>
> ib_port_info_set_timeout(p_pi,****
>
> @@ -327,10 +327,56 @@****
>
>
>     sm->p_subn->opt.****
>
>
>     force_link_speed);****
>
>                                                 if
> (memcmp(&p_pi->link_speed, &p_old_pi->link_speed,****
>
> -
> sizeof(p_pi->link_speed)))****
>
> +
> sizeof(p_pi->link_speed))) {****
>
>                                                                 send_set =
> TRUE;****
>
> +                                                             /* Determine
> whether QDR in LSE is being changed */****
>
> +                                                             if
> ((ib_port_info_get_link_speed_enabled(p_pi) &****
>
> +
> IB_LINK_SPEED_ACTIVE_10 &&****
>
> +
> !(ib_port_info_get_link_speed_enabled(p_old_pi) &****
>
> +
>   IB_LINK_SPEED_ACTIVE_10)) ||****
>
> +
> ((!(ib_port_info_get_link_speed_enabled(p_pi) &****
>
> +
>    IB_LINK_SPEED_ACTIVE_10) &&****
>
> +
>   ib_port_info_get_link_speed_enabled(p_old_pi) &****
>
> +
>   IB_LINK_SPEED_ACTIVE_10)))****
>
> +                                                             qdr_change =
> 1;****
>
> +                                             }****
>
>                                 }****
>
>  ****
>
> +                             if (osm_node_get_type(p_physp->p_node) ==
> IB_NODE_TYPE_SWITCH) {****
>
> +                                             physp0 =
> osm_node_get_physp_ptr(p_physp->p_node, 0);****
>
> +                                             cap_mask =
> physp0->port_info.capability_mask;****
>
> +                             } else****
>
> +                                             cap_mask =
> p_pi->capability_mask;****
>
> +                             if (!(cap_mask & IB_PORT_CAP_HAS_EXT_SPEEDS))
> ****
>
> +                                             qdr_change = 0;****
>
> +****
>
> +                             /* Do peer ports support extended link speeds
> ? */****
>
> +                             if (port_num != 0 && p_remote_physp) {****
>
> +                                             osm_physp_t *rphysp0;****
>
> +                                             ib_net32_t rem_cap_mask;****
>
> +****
>
> +                                             if
> (osm_node_get_type(p_remote_physp->p_node) ==****
>
> +
> IB_NODE_TYPE_SWITCH) {****
>
> +                                                             rphysp0 =
> osm_node_get_physp_ptr(p_remote_physp->p_node, 0);****
>
> +                                                             rem_cap_mask
> = rphysp0->port_info.capability_mask;****
>
> +                                             } else****
>
> +                                                             rem_cap_mask
> = p_remote_physp->port_info.capability_mask;****
>
> +****
>
> +                                             if (cap_mask &
> IB_PORT_CAP_HAS_EXT_SPEEDS &&****
>
> +                                                             rem_cap_mask
> & IB_PORT_CAP_HAS_EXT_SPEEDS) {****
>
> +                                                             if
> (sm->p_subn->opt.force_link_speed_ext &&****
>
> +
> (sm->p_subn->opt.force_link_speed_ext != IB_LINK_SPEED_EXT_SET_LSES ||****
>
> +
> p_pi->link_speed_ext_enabled !=****
>
> +
> ib_port_info_get_link_speed_sup(p_pi))) {****
>
> +
> p_pi->link_speed_ext_enabled = sm->p_subn->opt.force_link_speed_ext;****
>
> +
> if (memcmp(&p_pi->link_speed_ext_enabled,****
>
> +
>    &p_old_pi->link_speed_ext_enabled,****
>
> +
>    sizeof(p_pi->link_speed_ext_enabled)))****
>
> +
> send_set = TRUE;****
>
> +                                                             }****
>
> +                                             }****
>
> +                             }****
>
> +****
>
>                                 /* calc new op_vls and mtu */****
>
>                                 op_vls =****
>
>                                     osm_physp_calc_link_op_vls(sm->p_log,
> sm->p_subn, p_physp);****
>
> @@ -384,9 +430,13 @@****
>
>                 if (!send_set)****
>
>                                 goto Exit;****
>
>  ****
>
> +             attr_mod = cl_hton32(port_num);****
>
> +             if (qdr_change)****
>
> +                             attr_mod |= cl_hton32(1 << 31); /* AM
> SMSupportExtendedSpeeds */****
>
> +****
>
>                 status = osm_req_set(sm,
> osm_physp_get_dr_path_ptr(p_physp),****
>
>                                                      payload,
> sizeof(payload), IB_MAD_ATTR_PORT_INFO,****
>
> -                                                   cl_hton32(port_num),
> CL_DISP_MSGID_NONE, &context);****
>
> +                                                             attr_mod,
> CL_DISP_MSGID_NONE, &context);****
>
>                 if (status)****
>
>                                 ret = -1;****
>
>  ****
>
> Index:
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_console.c
> ****
>
> ===================================================================****
>
> ---
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_console.c
> (revision 8756)****
>
> +++
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_console.c
> (revision 8757)****
>
> @@ -1,6 +1,7 @@****
>
>  /*****
>
>   * Copyright (c) 2005-2009 Voltaire, Inc. All rights reserved.****
>
>   * Copyright (c) 2009 HNR Consulting. All rights reserved.****
>
> + * Copyright (c) 2010,2011 Mellanox Technologies LTD. All rights reserved.
> ****
>
>   *****
>
>   * This software is available to you under a choice of one of two****
>
>   * licenses.  You may choose to be licensed under the terms of the GNU***
> *
>
> @@ -661,6 +662,8 @@****
>
>                 uint64_t ports_sdr;****
>
>                 uint64_t ports_ddr;****
>
>                 uint64_t ports_qdr;****
>
> +             uint64_t ports_fdr;****
>
> +             uint64_t ports_edr;****
>
>                 uint64_t ports_unknown_speed;****
>
>                 uint64_t ports_reduced_speed;****
>
>                 port_report_t *reduced_speed_ports;****
>
> @@ -673,6 +676,8 @@****
>
>  {****
>
>                 fabric_stats_t *fs = (fabric_stats_t *) context;****
>
>                 osm_node_t *node = (osm_node_t *) p_map_item;****
>
> +             osm_physp_t *physp0;****
>
> +             ib_port_info_t *pi0;****
>
>                 uint8_t num_ports = osm_node_get_num_physp(node);****
>
>                 uint8_t port = 0;****
>
>  ****
>
> @@ -683,6 +688,12 @@****
>
>  ****
>
>                 fs->total_nodes++;****
>
>  ****
>
> +             if (osm_node_get_type(node) == IB_NODE_TYPE_SWITCH) {****
>
> +                             physp0 = osm_node_get_physp_ptr(node, 0);***
> *
>
> +                             pi0 = &physp0->port_info;****
>
> +             } else****
>
> +                             pi0 = NULL;****
>
> +****
>
>                 for (port = 1; port < num_ports; port++) {****
>
>                                 osm_physp_t *phys =
> osm_node_get_physp_ptr(node, port);****
>
>                                 ib_port_info_t *pi = NULL;****
>
> @@ -696,7 +707,9 @@****
>
>                                 if (!phys)****
>
>                                                 continue;****
>
>  ****
>
> -                              pi = &(phys->port_info);****
>
> +                             pi = &phys->port_info;****
>
> +                             if (!pi0)****
>
> +                                             pi0 = pi;****
>
>                                 active_speed =
> ib_port_info_get_link_speed_active(pi);****
>
>                                 enabled_speed =
> ib_port_info_get_link_speed_enabled(pi);****
>
>                                 active_width = pi->link_width_active;****
>
> @@ -726,12 +739,38 @@****
>
>                                                 fs->ports_ddr++;****
>
>                                                 break;****
>
>                                 case IB_LINK_SPEED_ACTIVE_10:****
>
> -                                              fs->ports_qdr++;****
>
> +                                             if (!(pi0->capability_mask &
> IB_PORT_CAP_HAS_EXT_SPEEDS) ||****
>
> +
> ((pi0->capability_mask & IB_PORT_CAP_HAS_EXT_SPEEDS) &&****
>
> +
> !ib_port_info_get_link_speed_ext_active(pi)))****
>
> +
> fs->ports_qdr++;****
>
>                                                 break;****
>
>                                 default:****
>
>                                                 fs->ports_unknown_speed++;
> ****
>
>                                                 break;****
>
>                                 }****
>
> +                             if (pi0->capability_mask &
> IB_PORT_CAP_HAS_EXT_SPEEDS &&****
>
> +
> ib_port_info_get_link_speed_ext_sup(pi) &&****
>
> +                                             (enabled_speed =
> pi->link_speed_ext_enabled) != IB_LINK_SPEED_EXT_DISABLE &&****
>
> +                                             active_speed ==
> IB_LINK_SPEED_ACTIVE_10) {****
>
> +                                             active_speed =
> ib_port_info_get_link_speed_ext_active(pi);****
>
> +                                             if ((enabled_speed ^
> active_speed) > active_speed) {****
>
> +
> __tag_port_report(&(fs->reduced_speed_ports),****
>
> +
>   cl_ntoh64(node->node_info.node_guid),****
>
> +
>   port, node->print_desc);****
>
> +
> fs->ports_reduced_speed++;****
>
> +                                             }****
>
> +                                             switch (active_speed) {****
>
> +                                             case
> IB_LINK_SPEED_EXT_ACTIVE_14:****
>
> +
> fs->ports_fdr++;****
>
> +                                                             break;****
>
> +                                             case
> IB_LINK_SPEED_EXT_ACTIVE_25:****
>
> +
> fs->ports_edr++;****
>
> +                                                             break;****
>
> +                                             default:****
>
> +
> fs->ports_unknown_speed++;****
>
> +                                                             break;****
>
> +                                             }****
>
> +                             }****
>
>                                 switch (active_width) {****
>
>                                 case IB_LINK_WIDTH_ACTIVE_1X:****
>
>                                                 fs->ports_1X++;****
>
> @@ -825,6 +864,10 @@****
>
>                                 fprintf(out, "   %" PRIu64 " at 5.0
> Gbps\n", fs.ports_ddr);****
>
>                 if (fs.ports_qdr)****
>
>                                 fprintf(out, "   %" PRIu64 " at 10.0
> Gbps\n", fs.ports_qdr);****
>
> +             if (fs.ports_fdr)****
>
> +                             fprintf(out, "      %" PRIu64 " at 14.0625
> Gbps\n", fs.ports_fdr);****
>
> +             if (fs.ports_edr)****
>
> +                             fprintf(out, "      %" PRIu64 " at 25.78125
> Gbps\n", fs.ports_edr);****
>
>  ****
>
>                 if (fs.ports_disabled + fs.ports_reduced_speed +
> fs.ports_reduced_width****
>
>                     > 0) {****
>
> Index:
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_sa_mcmember_record.c
> ****
>
> ===================================================================****
>
> ---
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_sa_mcmember_record.c
> (revision 8756)****
>
> +++
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_sa_mcmember_record.c
> (revision 8757)****
>
> @@ -1,6 +1,6 @@****
>
>  /*****
>
>   * Copyright (c) 2004-2009 Voltaire, Inc. All rights reserved.****
>
> - * Copyright (c) 2002-2009 Mellanox Technologies LTD. All rights reserved.
> ****
>
> + * Copyright (c) 2002-2011 Mellanox Technologies LTD. All rights reserved.
> ****
>
>   * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.****
>
>   * Copyright (c) 2008 Xsigo Systems Inc.  All rights reserved.****
>
>   *****
>
> @@ -285,7 +285,7 @@****
>
>                                 rate_mgrp = (uint8_t)
> (p_mgrp->mcmember_rec.rate & 0x3F);****
>
>                                 switch (rate_sel) {****
>
>                                 case 0:  /* Greater than RATE specified */
> ****
>
> -                                              if (rate_mgrp <=
> rate_required) {****
>
> +                                             if
> (ib_path_compare_rates(rate_mgrp, rate_required) <= 0) {****
>
>
> OSM_LOG(p_log, OSM_LOG_VERBOSE,****
>
>
> "Requested mcast group has RATE %x, "****
>
>
> "which is not greater than %x\n",****
>
> @@ -294,7 +294,7 @@****
>
>                                                 }****
>
>                                                 break;****
>
>                                 case 1:  /* Less than RATE specified */***
> *
>
> -                                              if (rate_mgrp >=
> rate_required) {****
>
> +                                             if
> (ib_path_compare_rates(rate_mgrp, rate_required) >= 0) {****
>
>
> OSM_LOG(p_log, OSM_LOG_VERBOSE,****
>
>
> "Requested mcast group has RATE %x, "****
>
>
> "which is not less than %x\n",****
>
> @@ -303,7 +303,7 @@****
>
>                                                 }****
>
>                                                 break;****
>
>                                 case 2:  /* Exactly RATE specified */****
>
> -                                              if (rate_mgrp !=
> rate_required) {****
>
> +                                             if
> (ib_path_compare_rates(rate_mgrp, rate_required)) {****
>
>
> OSM_LOG(p_log, OSM_LOG_VERBOSE,****
>
>
> "Requested mcast group has RATE %x, "****
>
>
> "which is not equal to %x\n",****
>
> @@ -327,6 +327,7 @@****
>
>                                                                     const
> osm_mgrp_t * p_mgrp,****
>
>                                                                     const
> osm_physp_t * p_physp)****
>
>  {****
>
> +             const ib_port_info_t *p_pi;****
>
>                 uint8_t mtu_required;****
>
>                 uint8_t mtu_mgrp;****
>
>                 uint8_t rate_required;****
>
> @@ -341,9 +342,11 @@****
>
>                                 return FALSE;****
>
>                 }****
>
>  ****
>
> -              rate_required =
> ib_port_info_compute_rate(&p_physp->port_info);****
>
> +             p_pi = &p_physp->port_info;****
>
> +             rate_required = ib_port_info_compute_rate(p_pi,****
>
> +
>   p_pi->capability_mask & IB_PORT_CAP_HAS_EXT_SPEEDS);****
>
>                 rate_mgrp = (uint8_t) (p_mgrp->mcmember_rec.rate & 0x3F);*
> ***
>
> -              if (rate_required < rate_mgrp) {****
>
> +             if (ib_path_compare_rates(rate_required, rate_mgrp) < 0) {**
> **
>
>                                 OSM_LOG(p_log, OSM_LOG_VERBOSE,****
>
>                                                 "Port's RATE %x is less
> than %x\n",****
>
>                                                 rate_required, rate_mgrp);
> ****
>
> @@ -635,6 +638,7 @@****
>
>                 uint8_t mtu_required, mtu, port_mtu;****
>
>                 uint8_t rate_sel = 2;       /* exactly */****
>
>                 uint8_t rate_required, rate, port_rate;****
>
> +             const ib_port_info_t *p_pi;****
>
>                 osm_log_t *p_log = sa->p_log;****
>
>  ****
>
>                 OSM_LOG_ENTER(sa->p_log);****
>
> @@ -652,7 +656,8 @@****
>
>                  * masked in.****
>
>                  */****
>
>  ****
>
> -              port_mtu = p_physp ?
> ib_port_info_get_mtu_cap(&p_physp->port_info) : 0;****
>
> +             p_pi = &p_physp->port_info;****
>
> +             port_mtu = p_physp ? ib_port_info_get_mtu_cap(p_pi) : 0;****
>
>                 if (!(comp_mask & IB_MCR_COMPMASK_MTU) ||****
>
>                     !(comp_mask & IB_MCR_COMPMASK_MTU_SEL) ||****
>
>                     (mtu_sel = (p_mcm_rec->mtu >> 6)) == 3)****
>
> @@ -689,7 +694,7 @@****
>
>                                 default:****
>
>                                                 break;****
>
>                                 }****
>
> -                              /* make sure it still be in the range */***
> *
>
> +                             /* make sure it still is in the range */****
>
>                                 if (mtu < IB_MIN_MTU || mtu > IB_MAX_MTU) {
> ****
>
>                                                 OSM_LOG(p_log,
> OSM_LOG_VERBOSE,****
>
>                                                                 "Calculated
> MTU %x is out of range\n", mtu);****
>
> @@ -699,7 +704,8 @@****
>
>                 p_mcm_rec->mtu = (mtu_sel << 6) | mtu;****
>
>  ****
>
>                 port_rate =****
>
> -                  p_physp ? ib_port_info_compute_rate(&p_physp->port_info)
> : 0;****
>
> +                             p_physp ? ib_port_info_compute_rate(p_pi,***
> *
>
> +
> p_pi->capability_mask & IB_PORT_CAP_HAS_EXT_SPEEDS) : 0;****
>
>                 if (!(comp_mask & IB_MCR_COMPMASK_RATE)****
>
>                     || !(comp_mask & IB_MCR_COMPMASK_RATE_SEL)****
>
>                     || (rate_sel = (p_mcm_rec->rate >> 6)) == 3)****
>
> @@ -709,7 +715,7 @@****
>
>                                 rate = rate_required;****
>
>                                 switch (rate_sel) {****
>
>                                 case 0:  /* Greater than RATE specified */
> ****
>
> -                                              if (port_rate &&
> rate_required >= port_rate) {****
>
> +                                             if
> (ib_path_compare_rates(rate_required, port_rate) >= 0) {****
>
>
> OSM_LOG(p_log, OSM_LOG_VERBOSE,****
>
>
> "Requested RATE %x >= the port\'s rate:%x\n",****
>
>
> rate_required, port_rate);****
>
> @@ -718,19 +724,20 @@****
>
>                                                 /* we provide the largest
> RATE possible if we can */****
>
>                                                 if (port_rate)****
>
>                                                                 rate =
> port_rate;****
>
> -                                              else if (rate_required <
> sa->p_subn->min_ca_rate)****
>
> +                                             else if
> (ib_path_compare_rates(rate_required,****
>
> +
>    sa->p_subn->min_ca_rate) < 0)****
>
>                                                                 rate =
> sa->p_subn->min_ca_rate;****
>
>                                                 else****
>
> -                                                              rate++;****
>
> +                                                             rate =
> ib_path_rate_get_next(rate);****
>
>                                                 break;****
>
>                                 case 1:  /* Less than RATE specified */***
> *
>
>                                                 /* use the smaller of the
> two:****
>
>                                                    a. one lower then the
> required****
>
>                                                    b. the rate of the
> requesting port (if exists) */****
>
> -                                              if (port_rate &&
> rate_required > port_rate)****
>
> +                                             if
> (ib_path_compare_rates(rate_required, port_rate) > 0)****
>
>                                                                 rate =
> port_rate;****
>
>                                                 else****
>
> -                                                              rate--;****
>
> +                                                             rate =
> ib_path_rate_get_prev(rate);****
>
>                                                 break;****
>
>                                 case 2:  /* Exactly RATE specified */****
>
>                                 default:****
>
> Index:
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_port_info_rcv.c
> ****
>
> ===================================================================****
>
> ---
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_port_info_rcv.c
> (revision 8756)****
>
> +++
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_port_info_rcv.c
> (revision 8757)****
>
> @@ -1,6 +1,6 @@****
>
>  /*****
>
>   * Copyright (c) 2004-2009 Voltaire, Inc. All rights reserved.****
>
> - * Copyright (c) 2002-2009 Mellanox Technologies LTD. All rights reserved.
> ****
>
> + * Copyright (c) 2002-2011 Mellanox Technologies LTD. All rights reserved.
> ****
>
>   * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.****
>
>   * Copyright (c) 2009 HNR Consulting. All rights reserved.****
>
>   *****
>
> @@ -101,7 +101,8 @@****
>
>                                                 sm->p_subn->min_ca_mtu =
> mtu;****
>
>                                 }****
>
>  ****
>
> -                              rate = ib_port_info_compute_rate(p_pi);****
>
> +                             rate = ib_port_info_compute_rate(p_pi,****
>
> +
> p_pi->capability_mask & IB_PORT_CAP_HAS_EXT_SPEEDS);****
>
>                                 if (rate < sm->p_subn->min_ca_rate) {****
>
>                                                 OSM_LOG(sm->p_log,
> OSM_LOG_VERBOSE,****
>
>                                                                 "Setting
> endport minimal rate to:%u defined by port:0x%"****
>
> Index:
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_pkey_mgr.c
> ****
>
> ===================================================================****
>
> ---
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_pkey_mgr.c
> (revision 8756)****
>
> +++
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_pkey_mgr.c
> (revision 8757)****
>
> @@ -203,8 +203,6 @@****
>
>                 }****
>
>  ****
>
>                 memcpy(payload, p_pi, sizeof(ib_port_info_t));****
>
> -              memset(payload + sizeof(ib_port_info_t), 0,****
>
> -                     IB_SMP_DATA_SIZE - sizeof(ib_port_info_t));****
>
>  ****
>
>                 p_pi = (ib_port_info_t *) payload;****
>
>                 if (enforce == TRUE)****
>
> Index:
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_lid_mgr.c
> ****
>
> ===================================================================****
>
> ---
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_lid_mgr.c
> (revision 8756)****
>
> +++
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_lid_mgr.c
> (revision 8757)****
>
> @@ -838,8 +838,6 @@****
>
>                  */****
>
>  ****
>
>                 memcpy(payload, p_old_pi, sizeof(ib_port_info_t));****
>
> -              memset(payload + sizeof(ib_port_info_t), 0,****
>
> -                     IB_SMP_DATA_SIZE - sizeof(ib_port_info_t));****
>
>  ****
>
>                 /*****
>
>                    Should never write back a value that is bigger then 3 in
> ****
>
> @@ -907,10 +905,12 @@****
>
>
> sizeof(p_pi->link_width_enabled)))****
>
>                                                 send_set = TRUE;****
>
>  ****
>
> -                              /* M_KeyProtectBits are always zero */****
>
> +                             /* M_KeyProtectBits are currently always zero
> */****
>
>                                 p_pi->mkey_lmc = p_mgr->p_subn->opt.lmc;**
> **
>
> -                              if (memcmp(&p_pi->mkey_lmc,
> &p_old_pi->mkey_lmc,****
>
> -                                                 sizeof(p_pi->mkey_lmc)))
> ****
>
> +                             if (ib_port_info_get_lmc(p_pi) !=****
>
> +
> ib_port_info_get_lmc(p_old_pi) ||****
>
> +                                             ib_port_info_get_mpb(p_pi) !=
> ****
>
> +
> ib_port_info_get_mpb(p_old_pi))****
>
>                                                 send_set = TRUE;****
>
>  ****
>
>                                 /* calc new op_vls and mtu */****
>
> @@ -989,10 +989,12 @@****
>
>  ****
>
>                                 /* Determine if enhanced switch port 0 and
> if so set LMC */****
>
>                                 if
> (osm_switch_sp0_is_lmc_capable(p_node->sw, p_mgr->p_subn)) {****
>
> -                                              /* M_KeyProtectBits are
> always zero */****
>
> +                                             /* M_KeyProtectBits are
> currently always zero */****
>
>                                                 p_pi->mkey_lmc =
> p_mgr->p_subn->opt.lmc;****
>
> -                                              if (memcmp(&p_pi->mkey_lmc,
> &p_old_pi->mkey_lmc,****
>
> -
> sizeof(p_pi->mkey_lmc)))****
>
> +                                             if
> (ib_port_info_get_lmc(p_pi) !=****
>
> +
> ib_port_info_get_lmc(p_old_pi) ||****
>
> +
> ib_port_info_get_mpb(p_pi) !=****
>
> +
> ib_port_info_get_mpb(p_old_pi))****
>
>                                                                 send_set =
> TRUE;****
>
>                                 }****
>
>                 }****
>
> Index:
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_sa_path_record.c
> ****
>
> ===================================================================****
>
> ---
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_sa_path_record.c
> (revision 8756)****
>
> +++
> B:/users/leonid/svn/winib/branches/fdr/ulp/opensm/user/opensm/osm_sa_path_record.c
> (revision 8757)****
>
> @@ -1,6 +1,6 @@****
>
>  /*****
>
>   * Copyright (c) 2004-2009 Voltaire, Inc. All rights reserved.****
>
> - * Copyright (c) 2002-2007 Mellanox Technologies LTD. All rights reserved.
> ****
>
> + * Copyright (c) 2002-2011 Mellanox Technologies LTD. All rights reserved.
> ****
>
>   * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.****
>
>   * Copyright (c) 2008 Xsigo Systems Inc. All rights reserved.****
>
>   * Copyright (c) 2009 HNR Consulting. All rights reserved.****
>
> @@ -158,12 +158,12 @@****
>
>
>      OUT osm_path_parms_t * p_parms)****
>
>  {****
>
>                 const osm_node_t *p_node;****
>
> -              const osm_physp_t *p_physp;****
>
> +             const osm_physp_t *p_physp, *p_physp0;****
>
>                 const osm_physp_t *p_src_physp;****
>
>                 const osm_physp_t *p_dest_physp;****
>
>                 const osm_prtn_t *p_prtn = NULL;****
>
>                 osm_opensm_t *p_osm;****
>
> -              const ib_port_info_t *p_pi;****
>
> +             const ib_port_info_t *p_pi, *p_pi0;****
>
>                 ib_api_status_t status = IB_SUCCESS;****
>
>                 ib_net16_t pkey;****
>
>                 uint8_t mtu;****
>
> @@ -193,7 +193,8 @@****
>
>                 p_osm = sa->p_subn->p_osm;****
>
>  ****
>
>                 mtu = ib_port_info_get_mtu_cap(p_pi);****
>
> -              rate = ib_port_info_compute_rate(p_pi);****
>
> +             rate = ib_port_info_compute_rate(p_pi,****
>
> +
> p_pi->capability_mask & IB_PORT_CAP_HAS_EXT_SPEEDS);****
>
>  ****
>
>                 /*****
>
>                    Mellanox Tavor device performance is better using 1K
> MTU.****
>
> @@ -347,8 +348,12 @@****
>
>                                 if (mtu > ib_port_info_get_mtu_cap(p_pi))*
> ***
>
>                                                 mtu =
> ib_port_info_get_mtu_cap(p_pi);****
>
>  ****
>
> -                              if (rate > ib_port_info_compute_rate(p_pi))
> ****
>
> -                                              rate =
> ib_port_info_compute_rate(p_pi);****
>
> +                             p_physp0 = osm_node_get_physp_ptr((osm_node_t
> *)p_node, 0);****
>
> +                             p_pi0 = &p_physp0->port_info;****
>
> +                             if (ib_path_compare_rates(rate,
> ib_port_info_compute_rate(p_pi,****
>
> +
> p_pi0->capability_mask & IB_PORT_CAP_HAS_EXT_SPEEDS)) > 0)****
>
> +                                             rate =
> ib_port_info_compute_rate(p_pi,****
>
> +
> p_pi0->capability_mask & IB_PORT_CAP_HAS_EXT_SPEEDS);****
>
>  ****
>
>                                 /*****
>
>                                    Continue with the egress port on this
> switch.****
>
> @@ -370,8 +375,12 @@****
>
>                                 if (mtu > ib_port_info_get_mtu_cap(p_pi))*
> ***
>
>                                                 mtu =
> ib_port_info_get_mtu_cap(p_pi);****
>
>  ****
>
> -                              if (rate > ib_port_info_compute_rate(p_pi))
> ****
>
> -                                              rate =
> ib_port_info_compute_rate(p_pi);****
>
> +                             p_physp0 = osm_node_get_physp_ptr((osm_node_t
> *)p_node, 0);****
>
> +                             p_pi0 = &p_physp0->port_info;****
>
> +                             if (ib_path_compare_rates(rate,
> ib_port_info_compute_rate(p_pi,****
>
> +
> p_pi0->capability_mask & IB_PORT_CAP_HAS_EXT_SPEEDS)) > 0)****
>
> +                                             rate =
> ib_port_info_compute_rate(p_pi,****
>
> +
> p_pi->capability_mask & IB_PORT_CAP_HAS_EXT_SPEEDS);****
>
>  ****
>
>                                 if (sa->p_subn->opt.qos) {****
>
>                                                 /*****
>
> @@ -423,8 +432,10 @@****
>
>                 if (mtu > ib_port_info_get_mtu_cap(p_pi))****
>
>                                 mtu = ib_port_info_get_mtu_cap(p_pi);****
>
>  ****
>
> -              if (rate > ib_port_info_compute_rate(p_pi))****
>
> -                              rate = ib_port_info_compute_rate(p_pi);****
>
> +             if (ib_path_compare_rates(rate,
> ib_port_info_compute_rate(p_pi,****
>
> +                                             p_pi->capability_mask &
> IB_PORT_CAP_HAS_EXT_SPEEDS)) > 0)****
>
> +                             rate = ib_port_info_compute_rate(p_pi,****
>
> +                                             p_pi->capability_mask &
> IB_PORT_CAP_HAS_EXT_SPEEDS);****
>
>  ****
>
>                 OSM_LOG(sa->p_log, OSM_LOG_DEBUG,****
>
>                                 "Path min MTU = %u, min rate = %u\n", mtu,
> rate);****
>
> @@ -449,7 +460,7 @@****
>
>                                                 mtu =
> p_qos_level->mtu_limit;****
>
>  ****
>
>                                 if (p_qos_level->rate_limit_set****
>
> -                                  && (rate > p_qos_level->rate_limit))***
> *
>
> +                                             &&
> (ib_path_compare_rates(rate, p_qos_level->rate_limit) > 0))****
>
>                                                 rate =
> p_qos_level->rate_limit;****
>
>  ****
>
>                                 if (p_qos_level->sl_set) {****
>
> @@ -527,23 +538,22 @@****
>
>                                 required_rate = ib_path_rec_rate(p_pr);***
> *
>
>                                 switch (ib_path_rec_rate_sel(p_pr)) {****
>
>                                 case 0:  /* must be greater than */****
>
> -                                              if (rate <= required_rate)*
> ***
>
> +                                             if
> (ib_path_compare_rates(rate, required_rate) <= 0)****
>
>                                                                 status =
> IB_NOT_FOUND;****
>
>                                                 break;****
>
>  ****
>
>                                 case 1:  /* must be less than */****
>
> -                                              if (rate >= required_rate) {
> ****
>
> +                                             if
> (ib_path_compare_rates(rate, required_rate) >= 0) {****
>
>                                                                 /* adjust
> the rate to use the highest rate****
>
>                                                                    lower
> then the required one */****
>
> -                                                              if
> (required_rate > 2)****
>
> -
> rate = required_rate - 1;****
>
> -                                                              else****
>
> +                                                             rate =
> ib_path_rate_get_prev(required_rate);****
>
> +                                                             if (!rate)**
> **
>
>
> status = IB_NOT_FOUND;****
>
>                                                 }****
>
>                                                 break;****
>
>  ****
>
>                                 case 2:  /* exact match */****
>
> -                                              if (rate < required_rate)**
> **
>
> +                                             if
> (ib_path_compare_rates(rate, required_rate))****
>
>                                                                 status =
> IB_NOT_FOUND;****
>
>                                                 else****
>
>                                                                 rate =
> required_rate;****
>
> _______________________________________________
> ofw mailing list
> ofw at lists.openfabrics.org
> http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openfabrics.org/pipermail/ofw/attachments/20110929/8b65320c/attachment.html>


More information about the ofw mailing list