OSDN Git Service

i40e: Update i40e_init_dcb to return correct error
authorChinh T Cao <chinh.t.cao@intel.com>
Wed, 6 Feb 2019 23:08:20 +0000 (15:08 -0800)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Tue, 16 Apr 2019 22:10:47 +0000 (15:10 -0700)
Modify the i40e_init_dcb to return the correct error when LLDP or DCBX
is not in operational state.

Signed-off-by: Chinh T Cao <chinh.t.cao@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/i40e/i40e_dcb.c
drivers/net/ethernet/intel/i40e/i40e_dcb.h
drivers/net/ethernet/intel/i40e/i40e_main.c

index 56bff8f..292eeb3 100644 (file)
@@ -863,22 +863,23 @@ out:
 /**
  * i40e_init_dcb
  * @hw: pointer to the hw struct
+ * @enable_mib_change: enable mib change event
  *
  * Update DCB configuration from the Firmware
  **/
-i40e_status i40e_init_dcb(struct i40e_hw *hw)
+i40e_status i40e_init_dcb(struct i40e_hw *hw, bool enable_mib_change)
 {
        i40e_status ret = 0;
        struct i40e_lldp_variables lldp_cfg;
        u8 adminstatus = 0;
 
        if (!hw->func_caps.dcb)
-               return ret;
+               return I40E_NOT_SUPPORTED;
 
        /* Read LLDP NVM area */
        ret = i40e_read_lldp_cfg(hw, &lldp_cfg);
        if (ret)
-               return ret;
+               return I40E_ERR_NOT_READY;
 
        /* Get the LLDP AdminStatus for the current port */
        adminstatus = lldp_cfg.adminstatus >> (hw->port * 4);
@@ -887,7 +888,7 @@ i40e_status i40e_init_dcb(struct i40e_hw *hw)
        /* LLDP agent disabled */
        if (!adminstatus) {
                hw->dcbx_status = I40E_DCBX_STATUS_DISABLED;
-               return ret;
+               return I40E_ERR_NOT_READY;
        }
 
        /* Get DCBX status */
@@ -896,26 +897,19 @@ i40e_status i40e_init_dcb(struct i40e_hw *hw)
                return ret;
 
        /* Check the DCBX Status */
-       switch (hw->dcbx_status) {
-       case I40E_DCBX_STATUS_DONE:
-       case I40E_DCBX_STATUS_IN_PROGRESS:
+       if (hw->dcbx_status == I40E_DCBX_STATUS_DONE ||
+           hw->dcbx_status == I40E_DCBX_STATUS_IN_PROGRESS) {
                /* Get current DCBX configuration */
                ret = i40e_get_dcb_config(hw);
                if (ret)
                        return ret;
-               break;
-       case I40E_DCBX_STATUS_DISABLED:
-               return ret;
-       case I40E_DCBX_STATUS_NOT_STARTED:
-       case I40E_DCBX_STATUS_MULTIPLE_PEERS:
-       default:
-               break;
+       } else if (hw->dcbx_status == I40E_DCBX_STATUS_DISABLED) {
+               return I40E_ERR_NOT_READY;
        }
 
        /* Configure the LLDP MIB change event */
-       ret = i40e_aq_cfg_lldp_mib_change_event(hw, true, NULL);
-       if (ret)
-               return ret;
+       if (enable_mib_change)
+               ret = i40e_aq_cfg_lldp_mib_change_event(hw, true, NULL);
 
        return ret;
 }
index 2b748a6..ddb48ae 100644 (file)
@@ -124,5 +124,5 @@ i40e_status i40e_aq_get_dcb_config(struct i40e_hw *hw, u8 mib_type,
                                             u8 bridgetype,
                                             struct i40e_dcbx_config *dcbcfg);
 i40e_status i40e_get_dcb_config(struct i40e_hw *hw);
-i40e_status i40e_init_dcb(struct i40e_hw *hw);
+i40e_status i40e_init_dcb(struct i40e_hw *hw, bool enable_mib_change);
 #endif /* _I40E_DCB_H_ */
index 96f5548..13e6942 100644 (file)
@@ -6411,7 +6411,7 @@ static int i40e_init_pf_dcb(struct i40e_pf *pf)
                goto out;
 
        /* Get the initial DCB configuration */
-       err = i40e_init_dcb(hw);
+       err = i40e_init_dcb(hw, true);
        if (!err) {
                /* Device/Function is not DCBX capable */
                if ((!hw->func_caps.dcb) ||