<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=us-ascii">
<META content="MSHTML 6.00.2900.5512" name=GENERATOR></HEAD>
<BODY>
<DIV><SPAN class=764342714-17112009><FONT face=Arial color=#0000ff 
size=2>Applied in 2581</FONT></SPAN></DIV><BR>
<BLOCKQUOTE dir=ltr 
style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #0000ff 2px solid; MARGIN-RIGHT: 0px">
  <DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left>
  <HR tabIndex=-1>
  <FONT face=Tahoma size=2><B>From:</B> ofw-bounces@lists.openfabrics.org 
  [mailto:ofw-bounces@lists.openfabrics.org] <B>On Behalf Of </B>Leonid 
  Keller<BR><B>Sent:</B> Monday, November 16, 2009 10:42 AM<BR><B>To:</B> 
  ofw_list<BR><B>Subject:</B> [ofw][patch][mlx4] added initialization of port 
  type to defaultvalues and improved debug prints.<BR></FONT><BR></DIV>
  <DIV></DIV>
  <DIV><FONT face=Arial size=2><FONT size=2>
  <P>We come across a case, when Port type from Registry has not been 
  read.</P></FONT></FONT></DIV>
  <DIV><FONT face=Arial size=2></FONT> </DIV>
  <DIV><FONT face=Arial size=2>Index: 
  V:/svn/winib/trunk/hw/mlx4/kernel/bus/net/main.c<BR>===================================================================<BR>--- 
  V:/svn/winib/trunk/hw/mlx4/kernel/bus/net/main.c (revision 5024)<BR>+++ 
  V:/svn/winib/trunk/hw/mlx4/kernel/bus/net/main.c (revision 5025)<BR>@@ 
  -274,10 +274,16 @@<BR>   if (port_type[i-1] & 
  dev_cap->supported_port_types[i])<BR>    dev->caps.port_type[i] 
  = port_type[i-1];<BR>   else {<BR>+   if 
  (dev_cap->supported_port_types[i] & 
  MLX4_PORT_TYPE_IB)<BR>+    dev->caps.port_type[i] = 
  MLX4_PORT_TYPE_IB;<BR>+   else<BR>+    dev->caps.port_type[i] 
  = 
  MLX4_PORT_TYPE_ETH;<BR>+<BR>    MLX4_PRINT_EV(TRACE_LEVEL_WARNING,MLX4_DBG_DRV 
  ,<BR>-    ("Requested port type %#x for port %d is 
  "<BR>-    "not supported by HW. Supported %#x. We'll 
  working to the supported one! \n", 
  <BR>-    port_type[i-1], i, 
  (int)dev_cap->supported_port_types[i]));<BR>+    ("Port 
  %d: Unsupported requested port type %#x. We'll use #%x from supported %#x! 
  \n", <BR>+    i, port_type[i-1], 
  dev->caps.port_type[i], 
  <BR>+    (int)dev_cap->supported_port_types[i]));<BR>+   <BR>    MLX4_PRINT_EV(TRACE_LEVEL_WARNING 
  ,MLX4_DBG_DRV ,<BR>     ("Ven %x Dev %d Fw %d.%d.%d, 
  IsBurnDevice %s\n", 
  <BR>     (unsigned)dev->pdev->ven_id, 
  (unsigned)dev->pdev->dev_id,<BR>@@ -286,8 +292,6 
  @@<BR>     (int) (dev->caps.fw_ver & 
  0xffff),<BR>     mlx4_is_livefish(dev) ? "Y" : 
  "N"<BR>     ));<BR>-   <BR>-   dev->caps.port_type[i] 
  = 
  dev_cap->supported_port_types[i];<BR>   }<BR>   if 
  (dev->caps.log_num_macs > dev_cap->log_max_macs[i]) 
  {<BR>    dev->caps.log_num_macs = 
  dev_cap->log_max_macs[i];<BR>Index: 
  V:/svn/winib/trunk/hw/mlx4/kernel/bus/drv/drv.c<BR>===================================================================<BR>--- 
  V:/svn/winib/trunk/hw/mlx4/kernel/bus/drv/drv.c (revision 5024)<BR>+++ 
  V:/svn/winib/trunk/hw/mlx4/kernel/bus/drv/drv.c (revision 5025)<BR>@@ 
  -276,28 +276,31 @@<BR> }<BR> <BR> BOOLEAN 
  __read_setup_params(PUNICODE_STRING puvalue)<BR>-{    
  <BR>-    NTSTATUS    status;    
  <BR>-    WDFKEY hParamsKey = 
  NULL;<BR>- DECLARE_CONST_UNICODE_STRING(KeyName, L"<A 
  href="file://\\REGISTRY\\MACHINE\\SOFTWARE\\Mellanox">\\REGISTRY\\MACHINE\\SOFTWARE\\Mellanox</A>");<BR>+{<BR>+ NTSTATUS    
  status;    <BR>+ WDFKEY hParamsKey = 
  NULL;<BR>+ DECLARE_CONST_UNICODE_STRING(KeyName, L"<A 
  href="file://\\Registry\\Machine\\SOFTWARE\\Mellanox">\\Registry\\Machine\\SOFTWARE\\Mellanox</A>");<BR>  DECLARE_CONST_UNICODE_STRING(PortType, 
  L"PortType");<BR>-    <BR>+<BR>  status = 
  WdfRegistryOpenKey(NULL, &KeyName, STANDARD_RIGHTS_ALL, 
  WDF_NO_OBJECT_ATTRIBUTES, &hParamsKey);<BR>  if( !NT_SUCCESS( 
  status ) ) <BR>-    {<BR>-  MLX4_PRINT( 
  TRACE_LEVEL_ERROR  ,MLX4_DBG_DEV  ,("WdfRegistryOpenKey Failed 
  status = 0x%x\n", status));<BR>-        
  return FALSE;<BR>+ {<BR>+  MLX4_PRINT( 
  TRACE_LEVEL_WARNING  ,MLX4_DBG_DEV  
  ,<BR>+   ("WdfRegistryOpenKey(<A 
  href="file://\\Registry\\Machine\\SOFTWARE\\Mellanox">\\Registry\\Machine\\SOFTWARE\\Mellanox</A>) 
  Failed status = 0x%x\n", status));<BR>+  return 
  FALSE;<BR>  }<BR>-    <BR>-    status 
  = WdfRegistryQueryUnicodeString(hParamsKey, &PortType, NULL, 
  puvalue);    <BR>+<BR>+ status = 
  WdfRegistryQueryUnicodeString(hParamsKey, &PortType, NULL, 
  puvalue);    <BR>  if( !NT_SUCCESS( status ) ) 
  <BR>-    {<BR>-        
  WdfRegistryClose(hParamsKey);<BR>-        
  return FALSE;<BR>+ {<BR>+  MLX4_PRINT( TRACE_LEVEL_ERROR  
  ,MLX4_DBG_DEV  
  ,<BR>+   ("WdfRegistryQueryUnicodeString(PortType) Failed 
  status = 0x%x\n", 
  status));<BR>+  WdfRegistryClose(hParamsKey);<BR>+  return 
  FALSE;<BR>  }<BR> <BR>-    
  WdfRegistryClose(hParamsKey);    <BR>-    return 
  TRUE;    
  <BR>+ WdfRegistryClose(hParamsKey);    <BR>+ return 
  TRUE;    <BR> }<BR> <BR> NTSTATUS<BR>@@ -306,7 
  +309,7 @@<BR>  NTSTATUS status = 
  STATUS_SUCCESS;<BR>  WDFKEY hKey = NULL;<BR>  WDFKEY 
  hParamsKey = NULL;<BR>-    BOOLEAN bRet = 
  FALSE;<BR>+ BOOLEAN bRet = 
  FALSE;<BR>  DECLARE_CONST_UNICODE_STRING(Parameters, 
  L"Parameters");<BR>  DECLARE_CONST_UNICODE_STRING(PortType, 
  L"PortType");<BR> <BR>@@ -316,31 +319,36 @@<BR>  uvalue.Buffer 
  = uvalue_data;<BR>  uvalue.MaximumLength = 
  MAX_UVALUE;<BR>  uvalue.Length = 0;<BR>-    
  <BR>+<BR>+ // default values<BR>+ dev_params->mod_port_type[0] = 
  MLX4_PORT_TYPE_IB;<BR>+ dev_params->mod_port_type[1] = 
  MLX4_PORT_TYPE_IB;<BR>+<BR>  status = 
  WdfDeviceOpenRegistryKey(Device, PLUGPLAY_REGKEY_DRIVER, 
  <BR>   STANDARD_RIGHTS_ALL, WDF_NO_OBJECT_ATTRIBUTES, 
  &hKey);<BR>  if( !NT_SUCCESS( status ) ) 
  {<BR>-  MLX4_PRINT( TRACE_LEVEL_ERROR  ,MLX4_DBG_DEV  
  ,("WdfDeviceOpenRegistryKey Failed status = 0x%x\n", 
  status));<BR>+  MLX4_PRINT( TRACE_LEVEL_ERROR  
  ,MLX4_DBG_DEV  ,<BR>+   ("WdfDeviceOpenRegistryKey(<A 
  href="file://\\Registry\\Machine\\Control\\Class\\">\\Registry\\Machine\\Control\\Class\\</A>...) 
  Failed status = 0x%x\n", status));<BR>   goto 
  err;<BR>  }<BR> <BR>  status = 
  WdfRegistryOpenKey(hKey, &Parameters, STANDARD_RIGHTS_ALL, 
  WDF_NO_OBJECT_ATTRIBUTES, &hParamsKey);<BR>  if( !NT_SUCCESS( 
  status ) ) {<BR>-  MLX4_PRINT( TRACE_LEVEL_ERROR  
  ,MLX4_DBG_DEV  ,("WdfRegistryOpenKey Failed status = 0x%x\n", 
  status));<BR>+  MLX4_PRINT( TRACE_LEVEL_ERROR  
  ,MLX4_DBG_DEV  ,("WdfRegistryOpenKey(Prameters) Failed status = 0x%x\n", 
  status));<BR>   goto 
  err;<BR>  }<BR> <BR>-    bRet = 
  __read_setup_params(&uvalue);<BR>-    if (bRet == 
  TRUE)<BR>-    {<BR>-        
  status = WdfRegistryAssignValue(hParamsKey, &PortType, 
  REG_SZ,uvalue.Length,uvalue.Buffer);        
  <BR>-        if( !NT_SUCCESS( status ) ) 
  {<BR>-            
  MLX4_PRINT( TRACE_LEVEL_ERROR  ,MLX4_DBG_DEV  
  ,("WdfRegistryAssignValue Failed status = 0x%x\n", 
  status));<BR>-            
  goto err;<BR>-        
  }        
  <BR>-        uvalue.Length = 
  0;<BR>-    }<BR>-    <BR>+ bRet = 
  __read_setup_params(&uvalue);<BR>+ if (bRet == 
  TRUE)<BR>+ {<BR>+  status = WdfRegistryAssignValue(hParamsKey, 
  &PortType, 
  REG_SZ,uvalue.Length,uvalue.Buffer);        
  <BR>+  if( !NT_SUCCESS( status ) ) 
  {<BR>+   MLX4_PRINT( TRACE_LEVEL_ERROR  
  ,MLX4_DBG_DEV  ,("WdfRegistryAssignValue(PortType) Failed status = 
  0x%x\n", status));<BR>+   goto 
  err;<BR>+  }<BR>+  uvalue.Length = 
  0;<BR>+ }<BR>+<BR>  status = 
  WdfRegistryQueryUnicodeString(hParamsKey, &PortType, NULL, 
  &uvalue);<BR>  if (NT_SUCCESS (status)) 
  {<BR>   if (!wcscmp(uvalue_data, L"ib,ib")) {<BR>@@ -360,10 
  +368,6 @@<BR>    dev_params->mod_port_type[1] = 
  MLX4_PORT_TYPE_ETH;<BR>   }<BR>  }<BR>- else 
  {<BR>-  dev_params->mod_port_type[0] = 
  MLX4_PORT_TYPE_IB;<BR>-  dev_params->mod_port_type[1] = 
  MLX4_PORT_TYPE_IB;<BR>- }<BR> <BR> err:<BR>  if (hKey 
  != NULL) <BR></DIV></BLOCKQUOTE></FONT></BODY></HTML>