<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:wf="http://schemas.microsoft.com/sharepoint/soap/workflow/" xmlns:dsss="http://schemas.microsoft.com/office/2006/digsig-setup" xmlns:dssi="http://schemas.microsoft.com/office/2006/digsig" xmlns:mdssi="http://schemas.openxmlformats.org/package/2006/digital-signature" xmlns:mver="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns:mrels="http://schemas.openxmlformats.org/package/2006/relationships" xmlns:spwp="http://microsoft.com/sharepoint/webpartpages" xmlns:ex12t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:ex12m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:pptsl="http://schemas.microsoft.com/sharepoint/soap/SlideLibrary/" xmlns:spsl="http://microsoft.com/webservices/SharePointPortalServer/PublishedLinksService" xmlns:Z="urn:schemas-microsoft-com:" 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:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@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 WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
-->
</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=WordSection1>

<p class=MsoNormal><span style='color:#1F497D'>For the last couple of years the
Mellanox burning tools are based on a standalone driver called mst.sys.<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'>This driver is a kernel driver (not
related to any hw) that allows the tools to work over all hw (even hw that was created
after the tool was already written).<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'>Please note that since this
driver is not a hw driver, there is no warning that the driver did not pass
WHQL.<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#1F497D'>Since the mst package is only
needed to update fw on mlnx hw it is not part of the open fabrics code base.<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'>In any case, even if we would
like to allow the old method of work (that is burning fw with a hw driver)
there is no need to have the code in the real driver.<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#1F497D'>A better approach would have been
to create an empty driver all together or to have empty functions for livefish
in the mthca code. Today supporting livefish has been a very problematic thing,
since we had to make sure that many  functions should work with livefish.
Just look at the mlx4_bus driver to see how many times livefish is mentioned
there.<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'>Thanks<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#1F497D'>Tzachi<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'><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"'> Fab Tillier
[mailto:ftillier@microsoft.com] <br>
<b>Sent:</b> Tuesday, August 31, 2010 7:59 PM<br>
<b>To:</b> Tzachi Dar; ofw@lists.openfabrics.org<br>
<b>Subject:</b> RE: patch: Remove livefish support from mthca<o:p></o:p></span></p>

</div>

</div>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal><span style='color:#1F497D'>More details please?  How
do you update FW if you end up with out-of-date FW on MTHCA?  What
replaces the live fish functionality?<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'>-Fab<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>

<div>

<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>

<p class=MsoNormal><b>From:</b> ofw-bounces@lists.openfabrics.org
[mailto:ofw-bounces@lists.openfabrics.org] <b>On Behalf Of </b>Tzachi Dar<br>
<b>Sent:</b> Tuesday, August 31, 2010 2:02 AM<br>
<b>To:</b> ofw@lists.openfabrics.org<br>
<b>Subject:</b> [ofw] patch: Remove livefish support from mthca<o:p></o:p></p>

</div>

</div>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>---
hw/mthca/kernel/hca_data.h            
Tue Apr 27 18:49:06 2010<o:p></o:p></p>

<p class=MsoNormal>+++
hw/mthca/kernel/hca_data.h         
Mon Jun 28 10:52:26 2010<o:p></o:p></p>

<p class=MsoNormal>@@ -28,7 +28,7 @@<o:p></o:p></p>

<p class=MsoNormal>  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE<o:p></o:p></p>

<p class=MsoNormal>  * SOFTWARE.<o:p></o:p></p>

<p class=MsoNormal>  *<o:p></o:p></p>

<p class=MsoNormal>- * $Id: hca_data.h 1630 2008-10-05 19:29:40Z leonidk $<o:p></o:p></p>

<p class=MsoNormal>+ * $Id: hca_data.h 5526 2010-02-03 10:10:56Z leonid $<o:p></o:p></p>

<p class=MsoNormal>  */<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> #ifndef __HCA_DATA_H__<o:p></o:p></p>

<p class=MsoNormal>@@ -239,7 +239,6 @@<o:p></o:p></p>

<p class=MsoNormal> void<o:p></o:p></p>

<p class=MsoNormal> setup_ci_interface(<o:p></o:p></p>

<p class=MsoNormal>               
IN                          
const    
ib_net64_t                                                                         
ca_guid,<o:p></o:p></p>

<p class=MsoNormal>-             
IN                          
const    
int                                                                                                          
is_livefish,<o:p></o:p></p>

<p class=MsoNormal>                               
OUT                                      
ci_interface_t                                                   
*p_interface );<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> void<o:p></o:p></p>

<p class=MsoNormal>@@ -324,10 +323,6 @@<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> void<o:p></o:p></p>

<p class=MsoNormal> mlnx_memory_if(<o:p></o:p></p>

<p class=MsoNormal>-             
IN          
OUT                                      
ci_interface_t                                                   
*p_interface );<o:p></o:p></p>

<p class=MsoNormal>-<o:p></o:p></p>

<p class=MsoNormal>-void<o:p></o:p></p>

<p class=MsoNormal>-mlnx_memory_if_livefish(<o:p></o:p></p>

<p class=MsoNormal>               
IN          
OUT                                      
ci_interface_t                                                   
*p_interface );<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> void<o:p></o:p></p>

<p class=MsoNormal>---
hw/mthca/kernel/hca_memory.c      Tue Apr 27 18:49:06
2010<o:p></o:p></p>

<p class=MsoNormal>+++ hw/mthca/kernel/hca_memory.c   Mon Jun 28
10:52:26 2010<o:p></o:p></p>

<p class=MsoNormal>@@ -28,7 +28,7 @@<o:p></o:p></p>

<p class=MsoNormal>  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE<o:p></o:p></p>

<p class=MsoNormal>  * SOFTWARE.<o:p></o:p></p>

<p class=MsoNormal>  *<o:p></o:p></p>

<p class=MsoNormal>- * $Id: hca_memory.c 2019 2009-03-09 08:36:31Z leonidk $<o:p></o:p></p>

<p class=MsoNormal>+ * $Id: hca_memory.c 5526 2010-02-03 10:10:56Z leonid $<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>@@ -136,17 +136,6 @@<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>               
HCA_ENTER(HCA_DBG_MEMORY);<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>-             
if (mthca_is_livefish(to_mdev(ib_pd_p->device))) {<o:p></o:p></p>

<p class=MsoNormal>-                             
mr_p = kzalloc(sizeof *mr_p, GFP_KERNEL);<o:p></o:p></p>

<p class=MsoNormal>-                             
if (!mr_p) {<o:p></o:p></p>

<p class=MsoNormal>-                                             
status = IB_INSUFFICIENT_MEMORY;<o:p></o:p></p>

<p class=MsoNormal>-                                             
goto err_mem;<o:p></o:p></p>

<p class=MsoNormal>-                             
}<o:p></o:p></p>

<p class=MsoNormal>-                             
mr_p->device = ib_pd_p->device;<o:p></o:p></p>

<p class=MsoNormal>-                             
mr_p->pd = ib_pd_p;<o:p></o:p></p>

<p class=MsoNormal>-                             
goto done;<o:p></o:p></p>

<p class=MsoNormal>-             
}<o:p></o:p></p>

<p class=MsoNormal>-<o:p></o:p></p>

<p class=MsoNormal>               
// sanity checks<o:p></o:p></p>

<p class=MsoNormal>               
if( !cl_is_blockable() ) {<o:p></o:p></p>

<p class=MsoNormal>                               
status = IB_UNSUPPORTED;<o:p></o:p></p>

<p class=MsoNormal>@@ -181,7 +170,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>               
// results<o:p></o:p></p>

<p class=MsoNormal>-done:<o:p></o:p></p>

<p class=MsoNormal>               
if (ph_mr)           *ph_mr =
(ib_mr_handle_t)mr_p;<o:p></o:p></p>

<p class=MsoNormal>               
*p_lkey = mr_p->lkey;<o:p></o:p></p>

<p class=MsoNormal>               
*p_rkey = cl_hton32( mr_p->rkey );<o:p></o:p></p>

<p class=MsoNormal>@@ -191,7 +179,6 @@<o:p></o:p></p>

<p class=MsoNormal> err_reg_phys_mr:<o:p></o:p></p>

<p class=MsoNormal> err_invalid_parm:<o:p></o:p></p>

<p class=MsoNormal> err_unsupported:<o:p></o:p></p>

<p class=MsoNormal>-err_mem:<o:p></o:p></p>

<p class=MsoNormal>               
if (status != IB_SUCCESS) <o:p></o:p></p>

<p class=MsoNormal>               
{<o:p></o:p></p>

<p class=MsoNormal>                               
HCA_PRINT(TRACE_LEVEL_ERROR ,HCA_DBG_MEMORY,<o:p></o:p></p>

<p class=MsoNormal>@@ -288,15 +275,9 @@<o:p></o:p></p>

<p class=MsoNormal> {<o:p></o:p></p>

<p class=MsoNormal>               
ib_api_status_t
              
status;<o:p></o:p></p>

<p class=MsoNormal>               
int err;<o:p></o:p></p>

<p class=MsoNormal>-             
struct ib_mr *ib_mr = (struct ib_mr *)h_mr;<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>               
HCA_ENTER(HCA_DBG_SHIM);<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>-             
if (mthca_is_livefish(to_mdev(ib_mr->device))) {<o:p></o:p></p>

<p class=MsoNormal>-                             
kfree(ib_mr);<o:p></o:p></p>

<p class=MsoNormal>-                             
goto done;<o:p></o:p></p>

<p class=MsoNormal>-             
}<o:p></o:p></p>

<p class=MsoNormal>-<o:p></o:p></p>

<p class=MsoNormal>               
// sanity checks<o:p></o:p></p>

<p class=MsoNormal>               
if( !cl_is_blockable() ) {<o:p></o:p></p>

<p class=MsoNormal>                                               
status = IB_UNSUPPORTED;<o:p></o:p></p>

<p class=MsoNormal>@@ -312,7 +293,6 @@<o:p></o:p></p>

<p class=MsoNormal>                               
goto err_dereg_mr;<o:p></o:p></p>

<p class=MsoNormal>               
}<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>-done:<o:p></o:p></p>

<p class=MsoNormal>               
status = IB_SUCCESS;<o:p></o:p></p>

<p class=MsoNormal>               
<o:p></o:p></p>

<p class=MsoNormal> err_dereg_mr:<o:p></o:p></p>

<p class=MsoNormal>@@ -589,13 +569,4 @@<o:p></o:p></p>

<p class=MsoNormal>               
p_interface->query_mw = mlnx_query_mw;<o:p></o:p></p>

<p class=MsoNormal>               
p_interface->destroy_mw = mlnx_destroy_mw;<o:p></o:p></p>

<p class=MsoNormal> }<o:p></o:p></p>

<p class=MsoNormal>-<o:p></o:p></p>

<p class=MsoNormal>-void<o:p></o:p></p>

<p class=MsoNormal>-mlnx_memory_if_livefish(<o:p></o:p></p>

<p class=MsoNormal>-             
IN          
OUT                                      
ci_interface_t                                                   
*p_interface )<o:p></o:p></p>

<p class=MsoNormal>-{<o:p></o:p></p>

<p class=MsoNormal>-             
p_interface->register_pmr = mlnx_register_pmr;<o:p></o:p></p>

<p class=MsoNormal>-             
p_interface->deregister_mr = mlnx_deregister_mr;<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>--- hw/mthca/kernel/hca_pnp.c              
Tue Apr 27 18:49:06 2010<o:p></o:p></p>

<p class=MsoNormal>+++
hw/mthca/kernel/hca_pnp.c           
Mon Jun 28 10:52:26 2010<o:p></o:p></p>

<p class=MsoNormal>@@ -238,9 +238,7 @@<o:p></o:p></p>

<p class=MsoNormal>                               
return NULL;<o:p></o:p></p>

<p class=MsoNormal>               
}<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>-             
setup_ci_interface( p_ext->hca.guid,<o:p></o:p></p>

<p class=MsoNormal>-                             
!!mthca_is_livefish(p_ext->hca.mdev),<o:p></o:p></p>

<p class=MsoNormal>-                             
pIfc );<o:p></o:p></p>

<p class=MsoNormal>+            
setup_ci_interface( p_ext->hca.guid, pIfc );<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>               
pIfc->p_hca_obj = &p_ext->hca.hob;<o:p></o:p></p>

<p class=MsoNormal>               
pIfc->vend_id = (uint32_t)p_ext->hcaConfig.VendorID;<o:p></o:p></p>

<p class=MsoNormal>@@ -276,10 +274,6 @@<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>               
HCA_ENTER( HCA_DBG_PNP );<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>-             
// there will be no resources for "livefish" (PCI memory controller
mode)<o:p></o:p></p>

<p class=MsoNormal>-             
if (!pHcaResList || !pHostResList)<o:p></o:p></p>

<p class=MsoNormal>-                             
goto done;<o:p></o:p></p>

<p class=MsoNormal>-                             
<o:p></o:p></p>

<p class=MsoNormal>               
p_ext = (hca_dev_ext_t*)p_dev_obj->DeviceExtension;<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>               
// store the bus number for reset of Tavor<o:p></o:p></p>

<p class=MsoNormal>@@ -304,16 +298,16 @@<o:p></o:p></p>

<p class=MsoNormal>                               
if( pHcaRes->Type == CmResourceTypeInterrupt )<o:p></o:p></p>

<p class=MsoNormal>                               
{<o:p></o:p></p>

<p class=MsoNormal>                                               
p_ext->interruptInfo = *pHostRes;<o:p></o:p></p>

<p class=MsoNormal>-           
if ( g_processor_affinity == 0xFFFFFFFF ) <o:p></o:p></p>

<p class=MsoNormal>+                                            
if ( g_processor_affinity == 0xFFFFFFFF ) <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>                                                               
 * Calculate the mask of the last processor<o:p></o:p></p>

<p class=MsoNormal>                                                               
 */<o:p></o:p></p>

<p class=MsoNormal>                                                               
KAFFINITY                          
n_active_processors_bitmask;<o:p></o:p></p>

<p class=MsoNormal>                                                               
uint32_t 
                            
last_processor_mask = 0 , tmp_processor_mask = 1;<o:p></o:p></p>

<p class=MsoNormal>                                                               
<o:p></o:p></p>

<p class=MsoNormal>                                                               
n_active_processors_bitmask = KeQueryActiveProcessors();<o:p></o:p></p>

<p class=MsoNormal>-               
while ( tmp_processor_mask & n_active_processors_bitmask )<o:p></o:p></p>

<p class=MsoNormal>+                                                            
while ( tmp_processor_mask & n_active_processors_bitmask )<o:p></o:p></p>

<p class=MsoNormal>                                                               
{<o:p></o:p></p>

<p class=MsoNormal>                                                                                               
last_processor_mask = tmp_processor_mask;<o:p></o:p></p>

<p class=MsoNormal>                                                                                               
tmp_processor_mask = tmp_processor_mask << 1;<o:p></o:p></p>

<p class=MsoNormal>@@ -383,7 +377,6 @@<o:p></o:p></p>

<p class=MsoNormal>                               
status = STATUS_UNSUCCESSFUL;<o:p></o:p></p>

<p class=MsoNormal>               
}<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>-done:<o:p></o:p></p>

<p class=MsoNormal>               
HCA_EXIT( HCA_DBG_PNP );<o:p></o:p></p>

<p class=MsoNormal>               
return status;<o:p></o:p></p>

<p class=MsoNormal> }<o:p></o:p></p>

<p class=MsoNormal>@@ -413,14 +406,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> <o:p></o:p></p>

<p class=MsoNormal>-static int mthca_get_livefish_info(struct mthca_dev *mdev,
__be64 *node_guid, u32 *hw_id)<o:p></o:p></p>

<p class=MsoNormal>-{<o:p></o:p></p>

<p class=MsoNormal>-             
*node_guid = cl_hton64((uint64_t)(ULONG_PTR)mdev);<o:p></o:p></p>

<p class=MsoNormal>-             
mdev->ib_dev.node_guid = *node_guid;<o:p></o:p></p>

<p class=MsoNormal>-             
*hw_id = 0;<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> static NTSTATUS<o:p></o:p></p>

<p class=MsoNormal> hca_start(<o:p></o:p></p>

<p class=MsoNormal>               
IN                                                          
DEVICE_OBJECT* const                
p_dev_obj,<o:p></o:p></p>

<p class=MsoNormal>@@ -432,6 +417,7 @@<o:p></o:p></p>

<p class=MsoNormal>               
IO_STACK_LOCATION    *pIoStack;<o:p></o:p></p>

<p class=MsoNormal>               
POWER_STATE                                 
powerState;<o:p></o:p></p>

<p class=MsoNormal>               
DEVICE_DESCRIPTION   devDesc;<o:p></o:p></p>

<p class=MsoNormal>+            
int                                                                          
err;<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>               
HCA_ENTER( HCA_DBG_PNP );<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>@@ -504,21 +490,13 @@<o:p></o:p></p>

<p class=MsoNormal>                               
return status;<o:p></o:p></p>

<p class=MsoNormal>               
}<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>-             
/*leo: get node GUID */<o:p></o:p></p>

<p class=MsoNormal>-             
{<o:p></o:p></p>

<p class=MsoNormal>-                             
int err;<o:p></o:p></p>

<p class=MsoNormal>-                             
if (mthca_is_livefish(p_ext->hca.mdev)) <o:p></o:p></p>

<p class=MsoNormal>-                                             
err = mthca_get_livefish_info( p_ext->hca.mdev, &p_ext->hca.guid,
&p_ext->hca.hw_ver );<o:p></o:p></p>

<p class=MsoNormal>-                             
else<o:p></o:p></p>

<p class=MsoNormal>-                                             
err = mthca_get_dev_info( p_ext->hca.mdev, &p_ext->hca.guid,
&p_ext->hca.hw_ver );<o:p></o:p></p>

<p class=MsoNormal>-<o:p></o:p></p>

<p class=MsoNormal>-                             
if (err) {<o:p></o:p></p>

<p class=MsoNormal>-<o:p></o:p></p>

<p class=MsoNormal>-                                             
//TODO: no cleanup on error<o:p></o:p></p>

<p class=MsoNormal>-                                             
HCA_PRINT( TRACE_LEVEL_ERROR,HCA_DBG_PNP, <o:p></o:p></p>

<p class=MsoNormal>-                                                             
("can't get guid - mthca_query_port()"));<o:p></o:p></p>

<p class=MsoNormal>-                                             
return STATUS_INSUFFICIENT_RESOURCES;<o:p></o:p></p>

<p class=MsoNormal>-                             
}<o:p></o:p></p>

<p class=MsoNormal>+            
err = mthca_get_dev_info( p_ext->hca.mdev, &p_ext->hca.guid,
&p_ext->hca.hw_ver );<o:p></o:p></p>

<p class=MsoNormal>+            
if (err) {<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+                            
//TODO: no cleanup on error<o:p></o:p></p>

<p class=MsoNormal>+                            
HCA_PRINT( TRACE_LEVEL_ERROR,HCA_DBG_PNP, <o:p></o:p></p>

<p class=MsoNormal>+                                            
("can't get guid - mthca_query_port()"));<o:p></o:p></p>

<p class=MsoNormal>+                            
return STATUS_INSUFFICIENT_RESOURCES;<o:p></o:p></p>

<p class=MsoNormal>               
}<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>               
/* queue HCA  */<o:p></o:p></p>

<p class=MsoNormal>@@ -549,8 +527,7 @@<o:p></o:p></p>

<p class=MsoNormal>                                               
DRV_VERSION, DRV_RELDATE<o:p></o:p></p>

<p class=MsoNormal>                                               
));<o:p></o:p></p>

<p class=MsoNormal>                               
HCA_PRINT_EV(TRACE_LEVEL_INFORMATION ,HCA_DBG_LOW ,<o:p></o:p></p>

<p class=MsoNormal>-                                             
("Flags %s%s%s%s%s%s%s\n", <o:p></o:p></p>

<p class=MsoNormal>-                                             
(mdev->mthca_flags & MTHCA_FLAG_LIVEFISH) ? "Flash Recovery
Mode:" : "",<o:p></o:p></p>

<p class=MsoNormal>+                                            
("Flags %s%s%s%s%s%s\n", <o:p></o:p></p>

<p class=MsoNormal>                                               
(mdev->mthca_flags & MTHCA_FLAG_MEMFREE) ? "MemFree:" :
"",<o:p></o:p></p>

<p class=MsoNormal>                                               
(mdev->mthca_flags & MTHCA_FLAG_NO_LAM) ? "NoLam:" :
"",<o:p></o:p></p>

<p class=MsoNormal>                                               
(mdev->mthca_flags & MTHCA_FLAG_FMR) ? "Fmr:" : "",<o:p></o:p></p>

<p class=MsoNormal>---
hw/mthca/kernel/hca_verbs.c           
Tue Apr 27 18:49:06 2010<o:p></o:p></p>

<p class=MsoNormal>+++
hw/mthca/kernel/hca_verbs.c         Mon
Jun 28 10:52:26 2010<o:p></o:p></p>

<p class=MsoNormal>@@ -28,7 +28,7 @@<o:p></o:p></p>

<p class=MsoNormal>  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE<o:p></o:p></p>

<p class=MsoNormal>  * SOFTWARE.<o:p></o:p></p>

<p class=MsoNormal>  *<o:p></o:p></p>

<p class=MsoNormal>- * $Id: hca_verbs.c 2166 2009-05-12 13:24:37Z leonidk $<o:p></o:p></p>

<p class=MsoNormal>+ * $Id: hca_verbs.c 5526 2010-02-03 10:10:56Z leonid $<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>@@ -85,24 +85,20 @@<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>               
ib_dev = &p_hca->mdev->ib_dev;<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>-             
if (mthca_is_livefish(p_hca->mdev)) <o:p></o:p></p>

<p class=MsoNormal>-                             
goto done;<o:p></o:p></p>

<p class=MsoNormal>-<o:p></o:p></p>

<p class=MsoNormal>               
HCA_PRINT(TRACE_LEVEL_INFORMATION  ,HCA_DBG_SHIM,<o:p></o:p></p>

<p class=MsoNormal>                               
("context 0x%p\n", ca_context));<o:p></o:p></p>

<p class=MsoNormal>               
if (pfn_async_event_cb) {<o:p></o:p></p>

<p class=MsoNormal>-                             
status = mlnx_hobs_set_cb(&p_hca->hob,<o:p></o:p></p>

<p class=MsoNormal>-                                             
pfn_async_event_cb,<o:p></o:p></p>

<p class=MsoNormal>-                                             
ca_context);<o:p></o:p></p>

<p class=MsoNormal>-                             
if (IB_SUCCESS != status) {<o:p></o:p></p>

<p class=MsoNormal>-                                             
goto err_set_cb;<o:p></o:p></p>

<p class=MsoNormal>-                             
}<o:p></o:p></p>

<p class=MsoNormal>+            
status = mlnx_hobs_set_cb(&p_hca->hob,<o:p></o:p></p>

<p class=MsoNormal>+                            
pfn_async_event_cb,<o:p></o:p></p>

<p class=MsoNormal>+                            
ca_context);<o:p></o:p></p>

<p class=MsoNormal>+            
if (IB_SUCCESS != status) {<o:p></o:p></p>

<p class=MsoNormal>+                            
goto err_set_cb;<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>               
//TODO: do we need something for kernel users ?<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>               
// Return pointer to HOB object<o:p></o:p></p>

<p class=MsoNormal>-done:  <o:p></o:p></p>

<p class=MsoNormal>               
if (ph_ca) *ph_ca = &p_hca->hob;<o:p></o:p></p>

<p class=MsoNormal>               
status =  IB_SUCCESS;<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>@@ -417,17 +413,9 @@<o:p></o:p></p>

<p class=MsoNormal> mlnx_close_ca (<o:p></o:p></p>

<p class=MsoNormal>               
IN                                                          
ib_ca_handle_t                                                               
h_ca)<o:p></o:p></p>

<p class=MsoNormal> {<o:p></o:p></p>

<p class=MsoNormal>-             
mlnx_hob_t                                      
*hob_p = (mlnx_hob_t *)h_ca;<o:p></o:p></p>

<p class=MsoNormal>               
HCA_ENTER(HCA_DBG_SHIM);<o:p></o:p></p>

<p class=MsoNormal>-<o:p></o:p></p>

<p class=MsoNormal>-             
if (mthca_is_livefish(MDEV_FROM_HOB( hob_p ))) <o:p></o:p></p>

<p class=MsoNormal>-                             
goto done;<o:p></o:p></p>

<p class=MsoNormal>-<o:p></o:p></p>

<p class=MsoNormal>               
mlnx_hobs_remove(h_ca);<o:p></o:p></p>

<p class=MsoNormal>-<o:p></o:p></p>

<p class=MsoNormal>-done:<o:p></o:p></p>

<p class=MsoNormal>               
HCA_EXIT(HCA_DBG_SHIM);<o:p></o:p></p>

<p class=MsoNormal>-             
<o:p></o:p></p>

<p class=MsoNormal>               
return IB_SUCCESS;<o:p></o:p></p>

<p class=MsoNormal> }<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>@@ -541,10 +529,7 @@<o:p></o:p></p>

<p class=MsoNormal>               
mlnx_hob_t                                      
*hob_p = (mlnx_hob_t *)h_ca;<o:p></o:p></p>

<p class=MsoNormal>               
hca_dev_ext_t *ext_p = EXT_FROM_HOB( hob_p );<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>-             
if (mthca_is_livefish(to_mdev(p_ucontext->device)))<o:p></o:p></p>

<p class=MsoNormal>-                             
goto done;<o:p></o:p></p>

<p class=MsoNormal>               
unmap_crspace_for_all(p_ucontext);<o:p></o:p></p>

<p class=MsoNormal>-done:  <o:p></o:p></p>

<p class=MsoNormal>               
cl_spinlock_acquire( &ext_p->uctx_lock );<o:p></o:p></p>

<p class=MsoNormal>               
cl_qlist_remove_item( &ext_p->uctx_list, &p_ucontext->list_item
);<o:p></o:p></p>

<p class=MsoNormal>               
cl_atomic_dec(&ext_p->usecnt);<o:p></o:p></p>

<p class=MsoNormal>@@ -931,7 +916,7 @@<o:p></o:p></p>

<p class=MsoNormal>               
ib_api_status_t
              
status = IB_SUCCESS;<o:p></o:p></p>

<p class=MsoNormal>               
struct ib_srq *ib_srq = (struct ib_srq *)h_srq;<o:p></o:p></p>

<p class=MsoNormal>               
UNUSED_PARAM(p_umv_buf);<o:p></o:p></p>

<p class=MsoNormal>-   <o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>               
HCA_ENTER(HCA_DBG_SRQ);<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>               
err = ibv_modify_srq(ib_srq, (void*)p_srq_attr, srq_attr_mask);<o:p></o:p></p>

<p class=MsoNormal>@@ -1649,7 +1634,6 @@<o:p></o:p></p>

<p class=MsoNormal> void<o:p></o:p></p>

<p class=MsoNormal> setup_ci_interface(<o:p></o:p></p>

<p class=MsoNormal>               
IN                          
const    
ib_net64_t                                                                         
ca_guid,<o:p></o:p></p>

<p class=MsoNormal>-             
IN                          
const    
int                                                                                                          
is_livefish,<o:p></o:p></p>

<p class=MsoNormal>               
IN          
OUT                                      
ci_interface_t                                                   
*p_interface )<o:p></o:p></p>

<p class=MsoNormal> {<o:p></o:p></p>

<p class=MsoNormal>               
cl_memclr(p_interface, sizeof(*p_interface));<o:p></o:p></p>

<p class=MsoNormal>@@ -1667,6 +1651,7 @@<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>               
/* The real interface. */<o:p></o:p></p>

<p class=MsoNormal>               
p_interface->open_ca = mlnx_open_ca;<o:p></o:p></p>

<p class=MsoNormal>+            
p_interface->modify_ca = mlnx_modify_ca; <o:p></o:p></p>

<p class=MsoNormal>               
p_interface->query_ca = mlnx_query_ca;<o:p></o:p></p>

<p class=MsoNormal>               
p_interface->close_ca = mlnx_close_ca;<o:p></o:p></p>

<p class=MsoNormal>               
p_interface->um_open_ca = mlnx_um_open;<o:p></o:p></p>

<p class=MsoNormal>@@ -1678,41 +1663,34 @@<o:p></o:p></p>

<p class=MsoNormal>               
p_interface->deallocate_pd = mlnx_deallocate_pd;<o:p></o:p></p>

<p class=MsoNormal>               
p_interface->vendor_call = fw_access_ctrl;<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>-             
if (is_livefish) {<o:p></o:p></p>

<p class=MsoNormal>-                             
mlnx_memory_if_livefish(p_interface);<o:p></o:p></p>

<p class=MsoNormal>-             
}<o:p></o:p></p>

<p class=MsoNormal>-             
else {     <o:p></o:p></p>

<p class=MsoNormal>-                             
p_interface->modify_ca = mlnx_modify_ca; <o:p></o:p></p>

<p class=MsoNormal>-                             
<o:p></o:p></p>

<p class=MsoNormal>-                             
p_interface->create_av = mlnx_create_av;<o:p></o:p></p>

<p class=MsoNormal>-                             
p_interface->query_av = mlnx_query_av;<o:p></o:p></p>

<p class=MsoNormal>-                             
p_interface->modify_av = mlnx_modify_av;<o:p></o:p></p>

<p class=MsoNormal>-                             
p_interface->destroy_av = mlnx_destroy_av;<o:p></o:p></p>

<p class=MsoNormal>-<o:p></o:p></p>

<p class=MsoNormal>-                             
p_interface->create_srq = mlnx_create_srq;<o:p></o:p></p>

<p class=MsoNormal>-                             
p_interface->modify_srq = mlnx_modify_srq;<o:p></o:p></p>

<p class=MsoNormal>-                             
p_interface->query_srq = mlnx_query_srq;<o:p></o:p></p>

<p class=MsoNormal>-                             
p_interface->destroy_srq = mlnx_destroy_srq;<o:p></o:p></p>

<p class=MsoNormal>-<o:p></o:p></p>

<p class=MsoNormal>-                             
p_interface->create_qp = mlnx_create_qp;<o:p></o:p></p>

<p class=MsoNormal>-                             
p_interface->create_spl_qp = mlnx_create_spl_qp;<o:p></o:p></p>

<p class=MsoNormal>-                             
p_interface->modify_qp = mlnx_modify_qp;<o:p></o:p></p>

<p class=MsoNormal>-                             
p_interface->ndi_modify_qp = mlnx_ndi_modify_qp;<o:p></o:p></p>

<p class=MsoNormal>-                             
p_interface->query_qp = mlnx_query_qp;<o:p></o:p></p>

<p class=MsoNormal>-                             
p_interface->destroy_qp = mlnx_destroy_qp;<o:p></o:p></p>

<p class=MsoNormal>-<o:p></o:p></p>

<p class=MsoNormal>-                             
p_interface->create_cq = mlnx_create_cq;<o:p></o:p></p>

<p class=MsoNormal>-                             
p_interface->resize_cq = mlnx_resize_cq;<o:p></o:p></p>

<p class=MsoNormal>-                             
p_interface->query_cq = mlnx_query_cq;<o:p></o:p></p>

<p class=MsoNormal>-                             
p_interface->destroy_cq = mlnx_destroy_cq;<o:p></o:p></p>

<p class=MsoNormal>-<o:p></o:p></p>

<p class=MsoNormal>-                             
p_interface->local_mad = mlnx_local_mad;<o:p></o:p></p>

<p class=MsoNormal>-                             
<o:p></o:p></p>

<p class=MsoNormal>-<o:p></o:p></p>

<p class=MsoNormal>-                             
mlnx_memory_if(p_interface);<o:p></o:p></p>

<p class=MsoNormal>-                             
mlnx_direct_if(p_interface);<o:p></o:p></p>

<p class=MsoNormal>-                             
mlnx_mcast_if(p_interface);<o:p></o:p></p>

<p class=MsoNormal>-             
}<o:p></o:p></p>

<p class=MsoNormal>+            
p_interface->create_av = mlnx_create_av;<o:p></o:p></p>

<p class=MsoNormal>+            
p_interface->query_av = mlnx_query_av;<o:p></o:p></p>

<p class=MsoNormal>+            
p_interface->modify_av = mlnx_modify_av;<o:p></o:p></p>

<p class=MsoNormal>+            
p_interface->destroy_av = mlnx_destroy_av;<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+            
p_interface->create_srq = mlnx_create_srq;<o:p></o:p></p>

<p class=MsoNormal>+            
p_interface->modify_srq = mlnx_modify_srq;<o:p></o:p></p>

<p class=MsoNormal>+            
p_interface->query_srq = mlnx_query_srq;<o:p></o:p></p>

<p class=MsoNormal>+            
p_interface->destroy_srq = mlnx_destroy_srq;<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+            
p_interface->create_qp = mlnx_create_qp;<o:p></o:p></p>

<p class=MsoNormal>+            
p_interface->create_spl_qp = mlnx_create_spl_qp;<o:p></o:p></p>

<p class=MsoNormal>+            
p_interface->modify_qp = mlnx_modify_qp;<o:p></o:p></p>

<p class=MsoNormal>+            
p_interface->ndi_modify_qp = mlnx_ndi_modify_qp;<o:p></o:p></p>

<p class=MsoNormal>+            
p_interface->query_qp = mlnx_query_qp;<o:p></o:p></p>

<p class=MsoNormal>+            
p_interface->destroy_qp = mlnx_destroy_qp;<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+            
p_interface->create_cq = mlnx_create_cq;<o:p></o:p></p>

<p class=MsoNormal>+            
p_interface->resize_cq = mlnx_resize_cq;<o:p></o:p></p>

<p class=MsoNormal>+            
p_interface->query_cq = mlnx_query_cq;<o:p></o:p></p>

<p class=MsoNormal>+            
p_interface->destroy_cq = mlnx_destroy_cq;<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+            
p_interface->local_mad = mlnx_local_mad;<o:p></o:p></p>

<p class=MsoNormal>+            
<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+            
mlnx_memory_if(p_interface);<o:p></o:p></p>

<p class=MsoNormal>+            
mlnx_direct_if(p_interface);<o:p></o:p></p>

<p class=MsoNormal>+            
mlnx_mcast_if(p_interface);<o:p></o:p></p>

<p class=MsoNormal> <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>---
hw/mthca/kernel/mt_memory.h      Tue Apr 27 18:49:06
2010<o:p></o:p></p>

<p class=MsoNormal>+++ hw/mthca/kernel/mt_memory.h   Mon Jun 28
10:52:26 2010<o:p></o:p></p>

<p class=MsoNormal>@@ -52,13 +52,13 @@<o:p></o:p></p>

<p class=MsoNormal>               
MT_ASSERT( KeGetCurrentIrql() <= DISPATCH_LEVEL );<o:p></o:p></p>

<p class=MsoNormal>               
switch (gfp_mask) {<o:p></o:p></p>

<p class=MsoNormal>                               
case GFP_ATOMIC:<o:p></o:p></p>

<p class=MsoNormal>-                                             
ptr = ExAllocatePoolWithTag( NonPagedPool, bsize, MT_TAG_ATOMIC );<o:p></o:p></p>

<p class=MsoNormal>+                                            
ptr = ExAllocatePoolWithTagSafeEx( NonPagedPool, bsize, MT_TAG_ATOMIC );<o:p></o:p></p>

<p class=MsoNormal>                                               
break;<o:p></o:p></p>

<p class=MsoNormal>                               
case GFP_KERNEL:<o:p></o:p></p>

<p class=MsoNormal>-                                             
ptr = ExAllocatePoolWithTag( NonPagedPool, bsize, MT_TAG_KERNEL );<o:p></o:p></p>

<p class=MsoNormal>+                                            
ptr = ExAllocatePoolWithTagSafeEx( NonPagedPool, bsize, MT_TAG_KERNEL );<o:p></o:p></p>

<p class=MsoNormal>                                               
break;<o:p></o:p></p>

<p class=MsoNormal>                               
case GFP_HIGHUSER:<o:p></o:p></p>

<p class=MsoNormal>-                                             
ptr = ExAllocatePoolWithTag( NonPagedPool, bsize, MT_TAG_HIGH );<o:p></o:p></p>

<p class=MsoNormal>+                                            
ptr = ExAllocatePoolWithTagSafeEx( NonPagedPool, bsize, MT_TAG_HIGH );<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>                                               
cl_dbg_out("kmalloc: unsupported flag %d\n", gfp_mask);<o:p></o:p></p>

<p class=MsoNormal>--- hw/mthca/kernel/mt_verbs.c            
Tue Apr 27 18:49:06 2010<o:p></o:p></p>

<p class=MsoNormal>+++
hw/mthca/kernel/mt_verbs.c         
Mon Jun 28 10:52:26 2010<o:p></o:p></p>

<p class=MsoNormal>@@ -33,7 +33,7 @@<o:p></o:p></p>

<p class=MsoNormal>  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE<o:p></o:p></p>

<p class=MsoNormal>  * SOFTWARE.<o:p></o:p></p>

<p class=MsoNormal>  *<o:p></o:p></p>

<p class=MsoNormal>- * $Id: mt_verbs.c 1435 2008-07-23 20:09:45Z shefty $<o:p></o:p></p>

<p class=MsoNormal>+ * $Id: mt_verbs.c 5526 2010-02-03 10:10:56Z leonid $<o:p></o:p></p>

<p class=MsoNormal>  */<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> #include <ib_verbs.h><o:p></o:p></p>

<p class=MsoNormal>@@ -123,9 +123,6 @@<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> int ibv_dealloc_pd(struct ib_pd *pd)<o:p></o:p></p>

<p class=MsoNormal> {<o:p></o:p></p>

<p class=MsoNormal>-             
if (mthca_is_livefish(to_mdev(pd->device))) <o:p></o:p></p>

<p class=MsoNormal>-                             
goto done;<o:p></o:p></p>

<p class=MsoNormal>-<o:p></o:p></p>

<p class=MsoNormal>               
// we need first to release list of AV MRs to decrease pd->usecnt<o:p></o:p></p>

<p class=MsoNormal>               
if (pd->ucontext) {<o:p></o:p></p>

<p class=MsoNormal>                               
struct ib_mr *ib_mr, *tmp;<o:p></o:p></p>

<p class=MsoNormal>@@ -141,7 +138,6 @@<o:p></o:p></p>

<p class=MsoNormal>                               
return -EBUSY;<o:p></o:p></p>

<p class=MsoNormal>               
}                             
<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>-done:<o:p></o:p></p>

<p class=MsoNormal>               
HCA_PRINT(TRACE_LEVEL_INFORMATION ,HCA_DBG_CQ ,("PD%d use cnt %d,
pd_handle %p, ctx %p \n", <o:p></o:p></p>

<p class=MsoNormal>                               
((struct mthca_pd*)pd)->pd_num, pd->usecnt, pd, pd->ucontext));<o:p></o:p></p>

<p class=MsoNormal>               
// direct call is a must, because "lifefish" devices doesn't fill
driver i/f table<o:p></o:p></p>

<p class=MsoNormal>---
hw/mthca/kernel/mthca.inx               
Tue Apr 27 18:49:06 2010<o:p></o:p></p>

<p class=MsoNormal>+++
hw/mthca/kernel/mthca.inx            
Tue Aug 31 11:59:17 2010<o:p></o:p></p>

<p class=MsoNormal>@@ -122,36 +122,24 @@<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> [HCA.DeviceSection.ntx86]<o:p></o:p></p>

<p class=MsoNormal> %MT23108.DeviceDesc%=MTHCA.DDInstall,
PCI\VEN_15B3&DEV_5A44<o:p></o:p></p>

<p class=MsoNormal>-%MT23109.DeviceDesc%=MTHCA.DDInstall,
PCI\VEN_15B3&DEV_5A45<o:p></o:p></p>

<p class=MsoNormal> %MT25208.DeviceDesc%=MTHCA.DDInstall,
PCI\VEN_15B3&DEV_6278<o:p></o:p></p>

<p class=MsoNormal>-%MT25209.DeviceDesc%=MTHCA.DDInstall, PCI\VEN_15B3&DEV_6279<o:p></o:p></p>

<p class=MsoNormal> %MT25218.DeviceDesc%=MTHCA.DDInstall,
PCI\VEN_15B3&DEV_6282<o:p></o:p></p>

<p class=MsoNormal> %MT24204.DeviceDesc%=MTHCA.DDInstall,
PCI\VEN_15B3&DEV_5E8C<o:p></o:p></p>

<p class=MsoNormal>-%MT24205.DeviceDesc%=MTHCA.DDInstall,
PCI\VEN_15B3&DEV_5E8D<o:p></o:p></p>

<p class=MsoNormal> %MT25204.DeviceDesc%=MTHCA.DDInstall,
PCI\VEN_15B3&DEV_6274<o:p></o:p></p>

<p class=MsoNormal>-%MT25205.DeviceDesc%=MTHCA.DDInstall,
PCI\VEN_15B3&DEV_6275<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> [HCA.DeviceSection.ntamd64]<o:p></o:p></p>

<p class=MsoNormal> %MT23108.DeviceDesc%=MTHCA.DDInstall,
PCI\VEN_15B3&DEV_5A44<o:p></o:p></p>

<p class=MsoNormal>-%MT23109.DeviceDesc%=MTHCA.DDInstall,
PCI\VEN_15B3&DEV_5A45<o:p></o:p></p>

<p class=MsoNormal> %MT25208.DeviceDesc%=MTHCA.DDInstall,
PCI\VEN_15B3&DEV_6278<o:p></o:p></p>

<p class=MsoNormal>-%MT25209.DeviceDesc%=MTHCA.DDInstall,
PCI\VEN_15B3&DEV_6279<o:p></o:p></p>

<p class=MsoNormal> %MT25218.DeviceDesc%=MTHCA.DDInstall,
PCI\VEN_15B3&DEV_6282<o:p></o:p></p>

<p class=MsoNormal> %MT24204.DeviceDesc%=MTHCA.DDInstall,
PCI\VEN_15B3&DEV_5E8C<o:p></o:p></p>

<p class=MsoNormal>-%MT24205.DeviceDesc%=MTHCA.DDInstall, PCI\VEN_15B3&DEV_5E8D<o:p></o:p></p>

<p class=MsoNormal> %MT25204.DeviceDesc%=MTHCA.DDInstall,
PCI\VEN_15B3&DEV_6274<o:p></o:p></p>

<p class=MsoNormal>-%MT25205.DeviceDesc%=MTHCA.DDInstall,
PCI\VEN_15B3&DEV_6275<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> [HCA.DeviceSection.ntia64]<o:p></o:p></p>

<p class=MsoNormal> %MT23108.DeviceDesc%=MTHCA.DDInstall,
PCI\VEN_15B3&DEV_5A44<o:p></o:p></p>

<p class=MsoNormal>-%MT23109.DeviceDesc%=MTHCA.DDInstall,
PCI\VEN_15B3&DEV_5A45<o:p></o:p></p>

<p class=MsoNormal> %MT25208.DeviceDesc%=MTHCA.DDInstall,
PCI\VEN_15B3&DEV_6278<o:p></o:p></p>

<p class=MsoNormal>-%MT25209.DeviceDesc%=MTHCA.DDInstall,
PCI\VEN_15B3&DEV_6279<o:p></o:p></p>

<p class=MsoNormal> %MT25218.DeviceDesc%=MTHCA.DDInstall,
PCI\VEN_15B3&DEV_6282<o:p></o:p></p>

<p class=MsoNormal> %MT24204.DeviceDesc%=MTHCA.DDInstall,
PCI\VEN_15B3&DEV_5E8C<o:p></o:p></p>

<p class=MsoNormal>-%MT24205.DeviceDesc%=MTHCA.DDInstall,
PCI\VEN_15B3&DEV_5E8D<o:p></o:p></p>

<p class=MsoNormal> %MT25204.DeviceDesc%=MTHCA.DDInstall,
PCI\VEN_15B3&DEV_6274<o:p></o:p></p>

<p class=MsoNormal>-%MT25205.DeviceDesc%=MTHCA.DDInstall,
PCI\VEN_15B3&DEV_6275<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> [MTHCA.DDInstall.ntx86]<o:p></o:p></p>

<p class=MsoNormal> CopyFiles = MTHCA.CopyFiles<o:p></o:p></p>

<p class=MsoNormal>@@ -449,14 +437,10 @@<o:p></o:p></p>

<p class=MsoNormal> MTL="Mellanox Technologies Ltd."<o:p></o:p></p>

<p class=MsoNormal> MTHCA.ServiceDesc = "Driver for Mellanox
InfiniHost Devices"<o:p></o:p></p>

<p class=MsoNormal> MT23108.DeviceDesc="InfiniHost (MT23108) -
Mellanox InfiniBand HCA"<o:p></o:p></p>

<p class=MsoNormal>-MT23109.DeviceDesc="InfiniHost (MT23109) - Mellanox
InfiniBand HCA (burner device)"<o:p></o:p></p>

<p class=MsoNormal> MT25208.DeviceDesc="InfiniHost (MT25208) -
Mellanox InfiniBand HCA for PCI Express"<o:p></o:p></p>

<p class=MsoNormal>-MT25209.DeviceDesc="InfiniHost (MT25209) - Mellanox
InfiniBand HCA for PCI Express (burner device)"<o:p></o:p></p>

<p class=MsoNormal> MT25218.DeviceDesc="InfiniHost III Ex (MT25218) -
Mellanox InfiniBand HCA for PCI Express"<o:p></o:p></p>

<p class=MsoNormal> MT24204.DeviceDesc="InfiniHost III Lx (MT24204) -
Mellanox InfiniBand HCA for PCI Express"<o:p></o:p></p>

<p class=MsoNormal>-MT24205.DeviceDesc="InfiniHost III Lx (MT24205) -
Mellanox InfiniBand HCA for PCI Express (burner device)"<o:p></o:p></p>

<p class=MsoNormal> MT25204.DeviceDesc="InfiniHost III Lx (MT25204) -
Mellanox InfiniBand HCA for PCI Express"<o:p></o:p></p>

<p class=MsoNormal>-MT25205.DeviceDesc="InfiniHost III Lx (MT25205) -
Mellanox InfiniBand HCA for PCI Express (burner device)"<o:p></o:p></p>

<p class=MsoNormal> DiskId = "Mellanox InfiniBand HCA installation
disk"<o:p></o:p></p>

<p class=MsoNormal> Ibbus.ServiceDesc = "InfiniBand Bus/AL (Filter
Driver)"<o:p></o:p></p>

<p class=MsoNormal> WinVerbs.ServiceDesc = "WinVerbs Service"<o:p></o:p></p>

<p class=MsoNormal>---
hw/mthca/kernel/mthca_dev.h         Tue
Apr 27 18:49:06 2010<o:p></o:p></p>

<p class=MsoNormal>+++
hw/mthca/kernel/mthca_dev.h      Mon Jun 28 10:52:26
2010<o:p></o:p></p>

<p class=MsoNormal>@@ -34,7 +34,7 @@<o:p></o:p></p>

<p class=MsoNormal>  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE<o:p></o:p></p>

<p class=MsoNormal>  * SOFTWARE.<o:p></o:p></p>

<p class=MsoNormal>  *<o:p></o:p></p>

<p class=MsoNormal>- * $Id: mthca_dev.h 1942 2009-02-11 10:49:02Z tzachid $<o:p></o:p></p>

<p class=MsoNormal>+ * $Id: mthca_dev.h 5526 2010-02-03 10:10:56Z leonid $<o:p></o:p></p>

<p class=MsoNormal>  */<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> #ifndef MTHCA_DEV_H<o:p></o:p></p>

<p class=MsoNormal>@@ -64,7 +64,6 @@<o:p></o:p></p>

<p class=MsoNormal>               
MTHCA_FLAG_MEMFREE    = 1 << 7,<o:p></o:p></p>

<p class=MsoNormal>               
MTHCA_FLAG_PCIE          = 1 <<
8,<o:p></o:p></p>

<p class=MsoNormal>               
MTHCA_FLAG_SINAI_OPT  = 1 << 9,<o:p></o:p></p>

<p class=MsoNormal>-             
MTHCA_FLAG_LIVEFISH   = 1 << 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> enum {<o:p></o:p></p>

<p class=MsoNormal>@@ -594,15 +593,6 @@<o:p></o:p></p>

<p class=MsoNormal>               
ULONG pi_nDataItems,<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>-static inline int mthca_is_livefish(struct mthca_dev *mdev)<o:p></o:p></p>

<p class=MsoNormal>-{<o:p></o:p></p>

<p class=MsoNormal>-             
if(mdev == NULL) {<o:p></o:p></p>

<p class=MsoNormal>-                             
return TRUE;<o:p></o:p></p>

<p class=MsoNormal>-             
}<o:p></o:p></p>

<p class=MsoNormal>-             
return mdev->mthca_flags & MTHCA_FLAG_LIVEFISH;<o:p></o:p></p>

<p class=MsoNormal>-}<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> void mthca_get_av_params(    
struct mthca_ah *ah_p, u8 *port_num, __be16 *dlid, u8 *sr, u8 *path_bits );<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>---
hw/mthca/kernel/mthca_main.c       Tue Apr 27
18:49:06 2010<o:p></o:p></p>

<p class=MsoNormal>+++ hw/mthca/kernel/mthca_main.c    Mon Jun
28 10:52:26 2010<o:p></o:p></p>

<p class=MsoNormal>@@ -31,7 +31,7 @@<o:p></o:p></p>

<p class=MsoNormal>  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE<o:p></o:p></p>

<p class=MsoNormal>  * SOFTWARE.<o:p></o:p></p>

<p class=MsoNormal>  *<o:p></o:p></p>

<p class=MsoNormal>- * $Id: mthca_main.c 2142 2009-05-03 09:32:01Z leonidk $<o:p></o:p></p>

<p class=MsoNormal>+ * $Id: mthca_main.c 5526 2010-02-03 10:10:56Z leonid $<o:p></o:p></p>

<p class=MsoNormal>  */<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> #include "mthca_dev.h"<o:p></o:p></p>

<p class=MsoNormal>@@ -69,8 +69,7 @@<o:p></o:p></p>

<p class=MsoNormal>               
TAVOR,                                               
/*
MT23108                       
*/<o:p></o:p></p>

<p class=MsoNormal>               
ARBEL_COMPAT,                            
/* MT25208 in Tavor compat mode   */<o:p></o:p></p>

<p class=MsoNormal>               
ARBEL_NATIVE,                               
/* MT25218 with extended features */<o:p></o:p></p>

<p class=MsoNormal>-             
SINAI,                                  
/* MT25204 */<o:p></o:p></p>

<p class=MsoNormal>-             
LIVEFISH                             
/* a burning device */<o:p></o:p></p>

<p class=MsoNormal>+            
SINAI                                    
/* MT25204 */<o:p></o:p></p>

<p class=MsoNormal> };<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> #define MTHCA_FW_VER(major, minor, subminor) \<o:p></o:p></p>

<p class=MsoNormal>@@ -85,8 +84,7 @@<o:p></o:p></p>

<p class=MsoNormal>               
{ MTHCA_FW_VER(3, 3, 2), MTHCA_FW_VER(3, 5, 0), 0, 0
},         /* TAVOR */<o:p></o:p></p>

<p class=MsoNormal>               
{ MTHCA_FW_VER(4, 7, 0), MTHCA_FW_VER(4, 8, 200), 0, 1 },    /*
ARBEL_COMPAT */<o:p></o:p></p>

<p class=MsoNormal>               
{ MTHCA_FW_VER(5, 1, 0), MTHCA_FW_VER(5, 3, 0), 1, 1
},         /* ARBEL_NATIVE */<o:p></o:p></p>

<p class=MsoNormal>-             
{ MTHCA_FW_VER(1, 0, 800), MTHCA_FW_VER(1, 2, 0), 1, 1 },    /*
SINAI */<o:p></o:p></p>

<p class=MsoNormal>-             
{ MTHCA_FW_VER(0, 0, 0), MTHCA_FW_VER(0, 0, 0), 0, 0 }                         
/* LIVEFISH */<o:p></o:p></p>

<p class=MsoNormal>+            
{ MTHCA_FW_VER(1, 0, 800), MTHCA_FW_VER(1, 2, 0), 1, 1
}      /* SINAI */<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>@@ -108,15 +106,6 @@<o:p></o:p></p>

<p class=MsoNormal>               
HCA(TOPSPIN,  ARBEL,      ARBEL_NATIVE),<o:p></o:p></p>

<p class=MsoNormal>               
HCA(TOPSPIN,  SINAI_OLD,    SINAI),<o:p></o:p></p>

<p class=MsoNormal>               
HCA(TOPSPIN,  SINAI,        SINAI),<o:p></o:p></p>

<p class=MsoNormal>-             
// live fishes<o:p></o:p></p>

<p class=MsoNormal>-             
HCA(MELLANOX, TAVOR_BD,    LIVEFISH),<o:p></o:p></p>

<p class=MsoNormal>-             
HCA(MELLANOX,
ARBEL_BD,                     
LIVEFISH),<o:p></o:p></p>

<p class=MsoNormal>-             
HCA(MELLANOX, SINAI_OLD_BD,           
LIVEFISH),<o:p></o:p></p>

<p class=MsoNormal>-             
HCA(MELLANOX,
SINAI_BD,                      
LIVEFISH),<o:p></o:p></p>

<p class=MsoNormal>-             
HCA(TOPSPIN,
TAVOR_BD,                        
LIVEFISH),<o:p></o:p></p>

<p class=MsoNormal>-             
HCA(TOPSPIN,
ARBEL_BD,                          
LIVEFISH),<o:p></o:p></p>

<p class=MsoNormal>-             
HCA(TOPSPIN, SINAI_OLD_BD, LIVEFISH),<o:p></o:p></p>

<p class=MsoNormal>-             
HCA(TOPSPIN,
SINAI_BD,                           
LIVEFISH),<o:p></o:p></p>

<p class=MsoNormal> };<o:p></o:p></p>

<p class=MsoNormal> #define MTHCA_PCI_TABLE_SIZE
(sizeof(mthca_pci_table)/sizeof(struct pci_device_id))<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>@@ -967,7 +956,6 @@<o:p></o:p></p>

<p class=MsoNormal>               
InitializeListHead(&ext->hca.hob.event_list);<o:p></o:p></p>

<p class=MsoNormal>               
KeInitializeSpinLock(&ext->hca.hob.event_list_lock);<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>-run_as_livefish:<o:p></o:p></p>

<p class=MsoNormal>               
/* allocate mdev structure */<o:p></o:p></p>

<p class=MsoNormal>               
mdev = kzalloc(sizeof *mdev, GFP_KERNEL);<o:p></o:p></p>

<p class=MsoNormal>               
if (!mdev) {<o:p></o:p></p>

<p class=MsoNormal>@@ -982,10 +970,6 @@<o:p></o:p></p>

<p class=MsoNormal>               
mdev->ext =
ext;                            
/* pointer to DEVICE OBJECT extension */<o:p></o:p></p>

<p class=MsoNormal>               
mdev->hca_type = p_id->driver_data;<o:p></o:p></p>

<p class=MsoNormal>               
mdev->ib_dev.mdev = mdev;<o:p></o:p></p>

<p class=MsoNormal>-             
if (p_id->driver_data == LIVEFISH)<o:p></o:p></p>

<p class=MsoNormal>-                             
mdev->mthca_flags |= MTHCA_FLAG_LIVEFISH;<o:p></o:p></p>

<p class=MsoNormal>-             
if (mthca_is_livefish(mdev))<o:p></o:p></p>

<p class=MsoNormal>-                             
goto done;<o:p></o:p></p>

<p class=MsoNormal>               
if (ext->hca_hidden)<o:p></o:p></p>

<p class=MsoNormal>                               
mdev->mthca_flags |= MTHCA_FLAG_DDR_HIDDEN;<o:p></o:p></p>

<p class=MsoNormal>               
if (mthca_hca_table[p_id->driver_data].is_memfree)<o:p></o:p></p>

<p class=MsoNormal>@@ -1042,7 +1026,6 @@<o:p></o:p></p>

<p class=MsoNormal>                               
goto err_cleanup;<o:p></o:p></p>

<p class=MsoNormal>               
}<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>-             
done:<o:p></o:p></p>

<p class=MsoNormal>               
ext->hca.mdev = mdev;<o:p></o:p></p>

<p class=MsoNormal>               
mdev->state = MTHCA_DEV_INITIALIZED;<o:p></o:p></p>

<p class=MsoNormal>               
return 0;<o:p></o:p></p>

<p class=MsoNormal>@@ -1071,20 +1054,6 @@<o:p></o:p></p>

<p class=MsoNormal> err_free_dev:<o:p></o:p></p>

<p class=MsoNormal>               
kfree(mdev);<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>-             
/* we failed device initialization - try to simulate "livefish" device
to facilitate using FW burning tools */<o:p></o:p></p>

<p class=MsoNormal>-             
{<o:p></o:p></p>

<p class=MsoNormal>-                             
USHORT dev_id = ext->hcaConfig.DeviceID;<o:p></o:p></p>

<p class=MsoNormal>-                             
<o:p></o:p></p>

<p class=MsoNormal>-                             
if (dev_id == PCI_DEVICE_ID_MELLANOX_ARBEL)<o:p></o:p></p>

<p class=MsoNormal>-                                             
dev_id = PCI_DEVICE_ID_MELLANOX_ARBEL_COMPAT;<o:p></o:p></p>

<p class=MsoNormal>-                             
p_id = mthca_find_pci_dev( (unsigned)ext->hcaConfig.VendorID, dev_id + 1 );<o:p></o:p></p>

<p class=MsoNormal>-                             
if (p_id == NULL) {<o:p></o:p></p>

<p class=MsoNormal>-                                             
status = STATUS_NO_SUCH_DEVICE;<o:p></o:p></p>

<p class=MsoNormal>-                                             
goto end;<o:p></o:p></p>

<p class=MsoNormal>-                             
}<o:p></o:p></p>

<p class=MsoNormal>-                             
goto run_as_livefish;<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:<o:p></o:p></p>

<p class=MsoNormal>               
return status;<o:p></o:p></p>

<p class=MsoNormal> }<o:p></o:p></p>

<p class=MsoNormal>@@ -1098,8 +1067,6 @@<o:p></o:p></p>

<p class=MsoNormal>               
ext->hca.mdev = NULL;<o:p></o:p></p>

<p class=MsoNormal>               
if (mdev) {<o:p></o:p></p>

<p class=MsoNormal>                               
mdev->state = MTHCA_DEV_UNINITIALIZED;<o:p></o:p></p>

<p class=MsoNormal>-                             
if (mthca_is_livefish(mdev))<o:p></o:p></p>

<p class=MsoNormal>-                                             
goto done;<o:p></o:p></p>

<p class=MsoNormal>                               
mthca_unregister_device(mdev);<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>                               
for (p = 1; p <= mdev->limits.num_ports; ++p)<o:p></o:p></p>

<p class=MsoNormal>@@ -1120,7 +1087,6 @@<o:p></o:p></p>

<p class=MsoNormal>                               
mthca_cleanup_uar_table(mdev);<o:p></o:p></p>

<p class=MsoNormal>                               
mthca_close_hca(mdev);<o:p></o:p></p>

<p class=MsoNormal>                               
mthca_cmd_cleanup(mdev);<o:p></o:p></p>

<p class=MsoNormal>-done:<o:p></o:p></p>

<p class=MsoNormal>                               
kfree(mdev);<o:p></o:p></p>

<p class=MsoNormal>               
}<o:p></o:p></p>

<p class=MsoNormal> }<o:p></o:p></p>

<p class=MsoNormal>---
hw/mthca/kernel/mthca_provider.c               
Tue Apr 27 18:49:06 2010<o:p></o:p></p>

<p class=MsoNormal>+++
hw/mthca/kernel/mthca_provider.c            
Mon Jun 28 10:52:26 2010<o:p></o:p></p>

<p class=MsoNormal>@@ -31,7 +31,7 @@<o:p></o:p></p>

<p class=MsoNormal>  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE<o:p></o:p></p>

<p class=MsoNormal>  * SOFTWARE.<o:p></o:p></p>

<p class=MsoNormal>  *<o:p></o:p></p>

<p class=MsoNormal>- * $Id: mthca_provider.c 2033 2009-03-17 16:05:55Z stansmith
$<o:p></o:p></p>

<p class=MsoNormal>+ * $Id: mthca_provider.c 5526 2010-02-03 10:10:56Z leonid $<o:p></o:p></p>

<p class=MsoNormal>  */<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> #include <ib_smi.h><o:p></o:p></p>

<p class=MsoNormal>@@ -69,15 +69,6 @@<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>               
RtlZeroMemory(props, sizeof *props);<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>-             
if (mthca_is_livefish(mdev)) {<o:p></o:p></p>

<p class=MsoNormal>-                             
props->max_pd = 1;<o:p></o:p></p>

<p class=MsoNormal>-                             
if ( !mdev || !mdev->ext )<o:p></o:p></p>

<p class=MsoNormal>-                                             
return err;<o:p></o:p></p>

<p class=MsoNormal>-                             
props->vendor_id = mdev->ext->hcaConfig.VendorID;<o:p></o:p></p>

<p class=MsoNormal>-                             
props->vendor_part_id = mdev->ext->hcaConfig.DeviceID;<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>               
in_mad  = kzalloc(sizeof *in_mad, GFP_KERNEL);<o:p></o:p></p>

<p class=MsoNormal>               
out_mad = kmalloc(sizeof *out_mad, GFP_KERNEL);<o:p></o:p></p>

<p class=MsoNormal>               
if (!in_mad || !out_mad)<o:p></o:p></p>

<p class=MsoNormal>@@ -354,9 +345,6 @@<o:p></o:p></p>

<p class=MsoNormal>                               
goto err_nomem;<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 (mthca_is_livefish(to_mdev(ibdev)))<o:p></o:p></p>

<p class=MsoNormal>-                             
goto done;<o:p></o:p></p>

<p class=MsoNormal>-             
<o:p></o:p></p>

<p class=MsoNormal>               
err = mthca_uar_alloc(to_mdev(ibdev), &context->uar);<o:p></o:p></p>

<p class=MsoNormal>               
if (err) <o:p></o:p></p>

<p class=MsoNormal>                               
goto err_uar_alloc;<o:p></o:p></p>

<p class=MsoNormal>@@ -399,7 +387,6 @@<o:p></o:p></p>

<p class=MsoNormal>                               
goto err_init_user;<o:p></o:p></p>

<p class=MsoNormal>               
}<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>-done:<o:p></o:p></p>

<p class=MsoNormal>               
err = ib_copy_to_umv_buf(p_umv_buf, &uresp, sizeof uresp);<o:p></o:p></p>

<p class=MsoNormal>               
if (err) <o:p></o:p></p>

<p class=MsoNormal>                               
goto err_copy_to_umv_buf;<o:p></o:p></p>

<p class=MsoNormal>@@ -428,17 +415,14 @@<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>  int mthca_dealloc_ucontext(struct ib_ucontext
*context)<o:p></o:p></p>

<p class=MsoNormal> {<o:p></o:p></p>

<p class=MsoNormal>-             
struct
mthca_ucontext                
*mucontext = to_mucontext(context);<o:p></o:p></p>

<p class=MsoNormal>+            
struct
mthca_ucontext                 
*mucontext = to_mucontext(context);<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>-             
if (mthca_is_livefish(to_mdev(context->device)))<o:p></o:p></p>

<p class=MsoNormal>-                             
goto done;<o:p></o:p></p>

<p class=MsoNormal>               
mthca_cleanup_user_db_tab(to_mdev(context->device), &mucontext->uar,<o:p></o:p></p>

<p class=MsoNormal>-                                                             
  mucontext->db_tab);<o:p></o:p></p>

<p class=MsoNormal>+                            
mucontext->db_tab);<o:p></o:p></p>

<p class=MsoNormal>               
MmUnmapLockedPages( mucontext->ibucontext.user_uar, mucontext->mdl );<o:p></o:p></p>

<p class=MsoNormal>               
IoFreeMdl(mucontext->mdl);<o:p></o:p></p>

<p class=MsoNormal>               
iounmap(mucontext->kva, PAGE_SIZE);<o:p></o:p></p>

<p class=MsoNormal>               
mthca_uar_free(to_mdev(context->device), &mucontext->uar);<o:p></o:p></p>

<p class=MsoNormal>-done:  <o:p></o:p></p>

<p class=MsoNormal>               
kfree(mucontext);<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>@@ -466,15 +450,11 @@<o:p></o:p></p>

<p class=MsoNormal>                               
goto err_mem;<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 (mthca_is_livefish(to_mdev(ibdev))) <o:p></o:p></p>

<p class=MsoNormal>-                             
goto done;<o:p></o:p></p>

<p class=MsoNormal>-<o:p></o:p></p>

<p class=MsoNormal>               
err = mthca_pd_alloc(to_mdev(ibdev), !context, pd);<o:p></o:p></p>

<p class=MsoNormal>               
if (err) {<o:p></o:p></p>

<p class=MsoNormal>                               
goto err_pd_alloc;<o:p></o:p></p>

<p class=MsoNormal>               
}<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>-done:<o:p></o:p></p>

<p class=MsoNormal>               
if (p_umv_buf && p_umv_buf->command) {<o:p></o:p></p>

<p class=MsoNormal>                               
resp.pd_handle = (u64)(UINT_PTR)pd;<o:p></o:p></p>

<p class=MsoNormal>                               
resp.pdn = pd->pd_num;<o:p></o:p></p>

<p class=MsoNormal>@@ -497,12 +477,7 @@<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> int mthca_dealloc_pd(struct ib_pd *pd)<o:p></o:p></p>

<p class=MsoNormal> {<o:p></o:p></p>

<p class=MsoNormal>-             
if (mthca_is_livefish(to_mdev(pd->device))) <o:p></o:p></p>

<p class=MsoNormal>-                             
goto done;<o:p></o:p></p>

<p class=MsoNormal>-<o:p></o:p></p>

<p class=MsoNormal>               
mthca_pd_free(to_mdev(pd->device), to_mpd(pd));<o:p></o:p></p>

<p class=MsoNormal>-<o:p></o:p></p>

<p class=MsoNormal>-done:  <o:p></o:p></p>

<p class=MsoNormal>               
kfree(pd);<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>---
hw/mthca/user/mlnx_uvp.c               
Tue Apr 27 18:49:27 2010<o:p></o:p></p>

<p class=MsoNormal>+++
hw/mthca/user/mlnx_uvp.c            
Mon Jun 28 10:52:27 2010<o:p></o:p></p>

<p class=MsoNormal>@@ -29,7 +29,7 @@<o:p></o:p></p>

<p class=MsoNormal>  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE<o:p></o:p></p>

<p class=MsoNormal>  * SOFTWARE.<o:p></o:p></p>

<p class=MsoNormal>  *<o:p></o:p></p>

<p class=MsoNormal>- * $Id: mlnx_uvp.c 593 2007-02-15 07:39:49Z sleybo $<o:p></o:p></p>

<p class=MsoNormal>+ * $Id: mlnx_uvp.c 5526 2010-02-03 10:10:56Z leonid $<o:p></o:p></p>

<p class=MsoNormal>  */<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> #include "mt_l2w.h"<o:p></o:p></p>

<p class=MsoNormal>@@ -71,23 +71,6 @@<o:p></o:p></p>

<p class=MsoNormal> #define
PCI_VENDOR_ID_TOPSPIN                                      
0x1867<o:p></o:p></p>

<p class=MsoNormal> #endif<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>-/* live fishes */<o:p></o:p></p>

<p class=MsoNormal>-#ifndef PCI_DEVICE_ID_MELLANOX_TAVOR_BD<o:p></o:p></p>

<p class=MsoNormal>-#define
PCI_DEVICE_ID_MELLANOX_TAVOR_BD                          
0x5a45<o:p></o:p></p>

<p class=MsoNormal>-#endif<o:p></o:p></p>

<p class=MsoNormal>-<o:p></o:p></p>

<p class=MsoNormal>-#ifndef PCI_DEVICE_ID_MELLANOX_ARBEL_BD<o:p></o:p></p>

<p class=MsoNormal>-#define
PCI_DEVICE_ID_MELLANOX_ARBEL_BD                            
0x6279<o:p></o:p></p>

<p class=MsoNormal>-#endif<o:p></o:p></p>

<p class=MsoNormal>-<o:p></o:p></p>

<p class=MsoNormal>-#ifndef PCI_DEVICE_ID_MELLANOX_SINAI_OLD_BD<o:p></o:p></p>

<p class=MsoNormal>-#define PCI_DEVICE_ID_MELLANOX_SINAI_OLD_BD  
0x5e8d<o:p></o:p></p>

<p class=MsoNormal>-#endif<o:p></o:p></p>

<p class=MsoNormal>-<o:p></o:p></p>

<p class=MsoNormal>-#ifndef PCI_DEVICE_ID_MELLANOX_SINAI_BD<o:p></o:p></p>

<p class=MsoNormal>-#define
PCI_DEVICE_ID_MELLANOX_SINAI_BD                             
0x6275<o:p></o:p></p>

<p class=MsoNormal>-#endif<o:p></o:p></p>

<p class=MsoNormal>-<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> #define HCA(v, d, t) \<o:p></o:p></p>

<p class=MsoNormal>               
{
PCI_VENDOR_ID_##v,               
PCI_DEVICE_ID_MELLANOX_##d, MTHCA_##t }<o:p></o:p></p>

<p class=MsoNormal>@@ -107,15 +90,6 @@<o:p></o:p></p>

<p class=MsoNormal>               
HCA( TOPSPIN,
                               
ARBEL,     
                                                           
ARBEL),<o:p></o:p></p>

<p class=MsoNormal>               
HCA( TOPSPIN,
                               
SINAI_OLD,
                                      
ARBEL),<o:p></o:p></p>

<p class=MsoNormal>               
HCA( TOPSPIN,
                               
SINAI,      
                                                           
ARBEL),<o:p></o:p></p>

<p class=MsoNormal>-             
// live fishes<o:p></o:p></p>

<p class=MsoNormal>-             
HCA(MELLANOX, TAVOR_BD, LIVEFISH),<o:p></o:p></p>

<p class=MsoNormal>-             
HCA(MELLANOX, ARBEL_BD,      LIVEFISH),<o:p></o:p></p>

<p class=MsoNormal>-             
HCA(MELLANOX, SINAI_OLD_BD, LIVEFISH),<o:p></o:p></p>

<p class=MsoNormal>-             
HCA(MELLANOX, SINAI_BD,       LIVEFISH),<o:p></o:p></p>

<p class=MsoNormal>-             
HCA(TOPSPIN,
TAVOR_BD,                        
LIVEFISH),<o:p></o:p></p>

<p class=MsoNormal>-             
HCA(TOPSPIN,
ARBEL_BD,                          
LIVEFISH),<o:p></o:p></p>

<p class=MsoNormal>-             
HCA(TOPSPIN, SINAI_OLD_BD, LIVEFISH),<o:p></o:p></p>

<p class=MsoNormal>-             
HCA(TOPSPIN,
SINAI_BD,                           
LIVEFISH),<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 struct ibv_context_ops mthca_ctx_ops = {<o:p></o:p></p>

</div>

</div>

</body>

</html>