Applied in 2581

________________________________

        From: [email protected]
[mailto:[email protected]] On Behalf Of Leonid Keller
        Sent: Monday, November 16, 2009 10:42 AM
        To: ofw_list
        Subject: [ofw][patch][mlx4] added initialization of port type to
defaultvalues and improved debug prints.
        
        
        We come across a case, when Port type from Registry has not been
read.

         
        Index: V:/svn/winib/trunk/hw/mlx4/kernel/bus/net/main.c
        
===================================================================
        --- V:/svn/winib/trunk/hw/mlx4/kernel/bus/net/main.c (revision
5024)
        +++ V:/svn/winib/trunk/hw/mlx4/kernel/bus/net/main.c (revision
5025)
        @@ -274,10 +274,16 @@
           if (port_type[i-1] & dev_cap->supported_port_types[i])
            dev->caps.port_type[i] = port_type[i-1];
           else {
        +   if (dev_cap->supported_port_types[i] & MLX4_PORT_TYPE_IB)
        +    dev->caps.port_type[i] = MLX4_PORT_TYPE_IB;
        +   else
        +    dev->caps.port_type[i] = MLX4_PORT_TYPE_ETH;
        +
            MLX4_PRINT_EV(TRACE_LEVEL_WARNING,MLX4_DBG_DRV ,
        -    ("Requested port type %#x for port %d is "
        -    "not supported by HW. Supported %#x. We'll working to the
supported one! \n", 
        -    port_type[i-1], i, (int)dev_cap->supported_port_types[i]));
        +    ("Port %d: Unsupported requested port type %#x. We'll use
#%x from supported %#x! \n", 
        +    i, port_type[i-1], dev->caps.port_type[i], 
        +    (int)dev_cap->supported_port_types[i]));
        +   
            MLX4_PRINT_EV(TRACE_LEVEL_WARNING ,MLX4_DBG_DRV ,
             ("Ven %x Dev %d Fw %d.%d.%d, IsBurnDevice %s\n", 
             (unsigned)dev->pdev->ven_id, (unsigned)dev->pdev->dev_id,
        @@ -286,8 +292,6 @@
             (int) (dev->caps.fw_ver & 0xffff),
             mlx4_is_livefish(dev) ? "Y" : "N"
             ));
        -   
        -   dev->caps.port_type[i] = dev_cap->supported_port_types[i];
           }
           if (dev->caps.log_num_macs > dev_cap->log_max_macs[i]) {
            dev->caps.log_num_macs = dev_cap->log_max_macs[i];
        Index: V:/svn/winib/trunk/hw/mlx4/kernel/bus/drv/drv.c
        
===================================================================
        --- V:/svn/winib/trunk/hw/mlx4/kernel/bus/drv/drv.c (revision
5024)
        +++ V:/svn/winib/trunk/hw/mlx4/kernel/bus/drv/drv.c (revision
5025)
        @@ -276,28 +276,31 @@
         }
         
         BOOLEAN __read_setup_params(PUNICODE_STRING puvalue)
        -{    
        -    NTSTATUS    status;    
        -    WDFKEY hParamsKey = NULL;
        - DECLARE_CONST_UNICODE_STRING(KeyName,
L"\\REGISTRY\\MACHINE\\SOFTWARE\\Mellanox");
        +{
        + NTSTATUS    status;    
        + WDFKEY hParamsKey = NULL;
        + DECLARE_CONST_UNICODE_STRING(KeyName,
L"\\Registry\\Machine\\SOFTWARE\\Mellanox");
          DECLARE_CONST_UNICODE_STRING(PortType, L"PortType");
        -    
        +
          status = WdfRegistryOpenKey(NULL, &KeyName,
STANDARD_RIGHTS_ALL, WDF_NO_OBJECT_ATTRIBUTES, &hParamsKey);
          if( !NT_SUCCESS( status ) ) 
        -    {
        -  MLX4_PRINT( TRACE_LEVEL_ERROR  ,MLX4_DBG_DEV
,("WdfRegistryOpenKey Failed status = 0x%x\n", status));
        -        return FALSE;
        + {
        +  MLX4_PRINT( TRACE_LEVEL_WARNING  ,MLX4_DBG_DEV  ,
        +
("WdfRegistryOpenKey(\\Registry\\Machine\\SOFTWARE\\Mellanox) Failed
status = 0x%x\n", status));
        +  return FALSE;
          }
        -    
        -    status = WdfRegistryQueryUnicodeString(hParamsKey,
&PortType, NULL, puvalue);    
        +
        + status = WdfRegistryQueryUnicodeString(hParamsKey, &PortType,
NULL, puvalue);    
          if( !NT_SUCCESS( status ) ) 
        -    {
        -        WdfRegistryClose(hParamsKey);
        -        return FALSE;
        + {
        +  MLX4_PRINT( TRACE_LEVEL_ERROR  ,MLX4_DBG_DEV  ,
        +   ("WdfRegistryQueryUnicodeString(PortType) Failed status =
0x%x\n", status));
        +  WdfRegistryClose(hParamsKey);
        +  return FALSE;
          }
         
        -    WdfRegistryClose(hParamsKey);    
        -    return TRUE;    
        + WdfRegistryClose(hParamsKey);    
        + return TRUE;    
         }
         
         NTSTATUS
        @@ -306,7 +309,7 @@
          NTSTATUS status = STATUS_SUCCESS;
          WDFKEY hKey = NULL;
          WDFKEY hParamsKey = NULL;
        -    BOOLEAN bRet = FALSE;
        + BOOLEAN bRet = FALSE;
          DECLARE_CONST_UNICODE_STRING(Parameters, L"Parameters");
          DECLARE_CONST_UNICODE_STRING(PortType, L"PortType");
         
        @@ -316,31 +319,36 @@
          uvalue.Buffer = uvalue_data;
          uvalue.MaximumLength = MAX_UVALUE;
          uvalue.Length = 0;
        -    
        +
        + // default values
        + dev_params->mod_port_type[0] = MLX4_PORT_TYPE_IB;
        + dev_params->mod_port_type[1] = MLX4_PORT_TYPE_IB;
        +
          status = WdfDeviceOpenRegistryKey(Device,
PLUGPLAY_REGKEY_DRIVER, 
           STANDARD_RIGHTS_ALL, WDF_NO_OBJECT_ATTRIBUTES, &hKey);
          if( !NT_SUCCESS( status ) ) {
        -  MLX4_PRINT( TRACE_LEVEL_ERROR  ,MLX4_DBG_DEV
,("WdfDeviceOpenRegistryKey Failed status = 0x%x\n", status));
        +  MLX4_PRINT( TRACE_LEVEL_ERROR  ,MLX4_DBG_DEV  ,
        +
("WdfDeviceOpenRegistryKey(\\Registry\\Machine\\Control\\Class\\...)
Failed status = 0x%x\n", status));
           goto err;
          }
         
          status = WdfRegistryOpenKey(hKey, &Parameters,
STANDARD_RIGHTS_ALL, WDF_NO_OBJECT_ATTRIBUTES, &hParamsKey);
          if( !NT_SUCCESS( status ) ) {
        -  MLX4_PRINT( TRACE_LEVEL_ERROR  ,MLX4_DBG_DEV
,("WdfRegistryOpenKey Failed status = 0x%x\n", status));
        +  MLX4_PRINT( TRACE_LEVEL_ERROR  ,MLX4_DBG_DEV
,("WdfRegistryOpenKey(Prameters) Failed status = 0x%x\n", status));
           goto err;
          }
         
        -    bRet = __read_setup_params(&uvalue);
        -    if (bRet == TRUE)
        -    {
        -        status = WdfRegistryAssignValue(hParamsKey, &PortType,
REG_SZ,uvalue.Length,uvalue.Buffer);        
        -        if( !NT_SUCCESS( status ) ) {
        -            MLX4_PRINT( TRACE_LEVEL_ERROR  ,MLX4_DBG_DEV
,("WdfRegistryAssignValue Failed status = 0x%x\n", status));
        -            goto err;
        -        }        
        -        uvalue.Length = 0;
        -    }
        -    
        + bRet = __read_setup_params(&uvalue);
        + if (bRet == TRUE)
        + {
        +  status = WdfRegistryAssignValue(hParamsKey, &PortType,
REG_SZ,uvalue.Length,uvalue.Buffer);        
        +  if( !NT_SUCCESS( status ) ) {
        +   MLX4_PRINT( TRACE_LEVEL_ERROR  ,MLX4_DBG_DEV
,("WdfRegistryAssignValue(PortType) Failed status = 0x%x\n", status));
        +   goto err;
        +  }
        +  uvalue.Length = 0;
        + }
        +
          status = WdfRegistryQueryUnicodeString(hParamsKey, &PortType,
NULL, &uvalue);
          if (NT_SUCCESS (status)) {
           if (!wcscmp(uvalue_data, L"ib,ib")) {
        @@ -360,10 +368,6 @@
            dev_params->mod_port_type[1] = MLX4_PORT_TYPE_ETH;
           }
          }
        - else {
        -  dev_params->mod_port_type[0] = MLX4_PORT_TYPE_IB;
        -  dev_params->mod_port_type[1] = MLX4_PORT_TYPE_IB;
        - }
         
         err:
          if (hKey != NULL) 
        

_______________________________________________
ofw mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw

Reply via email to