ice: Copy dcbx configuration only if mode is correct
authorMichal Swiatkowski <michal.swiatkowski@intel.com>
Mon, 29 Jul 2019 09:04:48 +0000 (02:04 -0700)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Fri, 23 Aug 2019 16:59:51 +0000 (09:59 -0700)
In rebuild DCB desired_dcbx_cfg was copy to local_dcbx_cfg, but
if DCBX mode is IEEE desired_dcbx_cfg is not initialized by DCBX
config from FW. Change logic to copy config value only if mode is
set to CEE.

If driver copy desired_dcbx_cfg to local_dcbx_cfg in IEEE mode there
is problem with globr. System is frozen after two or more globr.

Signed-off-by: Michal Swiatkowski <michal.swiatkowski@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/ice/ice_dcb_lib.c

index 22bdc244c7e037fb8da3f524338267e0c3290ea0..4fc9faf5bc715a1115f202a815bdd7c45bc772e8 100644 (file)
@@ -334,8 +334,10 @@ void ice_dcb_rebuild(struct ice_pf *pf)
        devm_kfree(&pf->pdev->dev, prev_cfg);
 
        /* Set the local desired config */
-       memset(&pf->hw.port_info->local_dcbx_cfg, 0, sizeof(*local_dcbx_cfg));
-       memcpy(local_dcbx_cfg, desired_dcbx_cfg, sizeof(*local_dcbx_cfg));
+       if (local_dcbx_cfg->dcbx_mode == ICE_DCBX_MODE_CEE)
+               memcpy(local_dcbx_cfg, desired_dcbx_cfg,
+                      sizeof(*local_dcbx_cfg));
+
        ice_cfg_etsrec_defaults(pf->hw.port_info);
        ret = ice_set_dcb_cfg(pf->hw.port_info);
        if (ret) {