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