ice: Fix problems with DSCP QoS implementation
The patch that implemented DSCP QoS implementation removed a
bandwidth check that was used to check for a specific condition
caused by some corner cases.  This check should not of been
removed.
The same patch also added a check for when the DCBx state could
be changed in relation to DSCP, but the check was erroneously
added nested in a check for CEE mode, which made the check useless.
Fix these problems by re-adding the bandwidth check and relocating
the DSCP mode check earlier in the function that changes DCBx state
in the driver.
Fixes: 2a87bd73e5 ("ice: Add DSCP support")
Reported-by: kernel test robot <lkp@intel.com>
Signed-off-by: Dave Ertman <david.m.ertman@intel.com>
Tested-by: Gurucharan G <gurucharanx.g@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
			
			
This commit is contained in:
		
							parent
							
								
									2657e16d8c
								
							
						
					
					
						commit
						6d39ea19b0
					
				| @ -97,6 +97,9 @@ static int ice_dcbnl_setets(struct net_device *netdev, struct ieee_ets *ets) | ||||
| 
 | ||||
| 	new_cfg->etscfg.maxtcs = pf->hw.func_caps.common_cap.maxtc; | ||||
| 
 | ||||
| 	if (!bwcfg) | ||||
| 		new_cfg->etscfg.tcbwtable[0] = 100; | ||||
| 
 | ||||
| 	if (!bwrec) | ||||
| 		new_cfg->etsrec.tcbwtable[0] = 100; | ||||
| 
 | ||||
| @ -167,15 +170,18 @@ static u8 ice_dcbnl_setdcbx(struct net_device *netdev, u8 mode) | ||||
| 	if (mode == pf->dcbx_cap) | ||||
| 		return ICE_DCB_NO_HW_CHG; | ||||
| 
 | ||||
| 	pf->dcbx_cap = mode; | ||||
| 	qos_cfg = &pf->hw.port_info->qos_cfg; | ||||
| 	if (mode & DCB_CAP_DCBX_VER_CEE) { | ||||
| 		if (qos_cfg->local_dcbx_cfg.pfc_mode == ICE_QOS_MODE_DSCP) | ||||
| 			return ICE_DCB_NO_HW_CHG; | ||||
| 
 | ||||
| 	/* DSCP configuration is not DCBx negotiated */ | ||||
| 	if (qos_cfg->local_dcbx_cfg.pfc_mode == ICE_QOS_MODE_DSCP) | ||||
| 		return ICE_DCB_NO_HW_CHG; | ||||
| 
 | ||||
| 	pf->dcbx_cap = mode; | ||||
| 
 | ||||
| 	if (mode & DCB_CAP_DCBX_VER_CEE) | ||||
| 		qos_cfg->local_dcbx_cfg.dcbx_mode = ICE_DCBX_MODE_CEE; | ||||
| 	} else { | ||||
| 	else | ||||
| 		qos_cfg->local_dcbx_cfg.dcbx_mode = ICE_DCBX_MODE_IEEE; | ||||
| 	} | ||||
| 
 | ||||
| 	dev_info(ice_pf_to_dev(pf), "DCBx mode = 0x%x\n", mode); | ||||
| 	return ICE_DCB_HW_CHG_RST; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user