<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>