diff options
Diffstat (limited to 'drivers/net/bnx2x/bnx2x_main.c')
| -rw-r--r-- | drivers/net/bnx2x/bnx2x_main.c | 18 | 
1 files changed, 14 insertions, 4 deletions
diff --git a/drivers/net/bnx2x/bnx2x_main.c b/drivers/net/bnx2x/bnx2x_main.c index d584d32c747..032ae184b60 100644 --- a/drivers/net/bnx2x/bnx2x_main.c +++ b/drivers/net/bnx2x/bnx2x_main.c @@ -1974,13 +1974,22 @@ static void bnx2x_init_vn_minmax(struct bnx2x *bp, int vn)  		vn_max_rate = 0;  	} else { +		u32 maxCfg = bnx2x_extract_max_cfg(bp, vn_cfg); +  		vn_min_rate = ((vn_cfg & FUNC_MF_CFG_MIN_BW_MASK) >>  				FUNC_MF_CFG_MIN_BW_SHIFT) * 100; -		/* If min rate is zero - set it to 1 */ +		/* If fairness is enabled (not all min rates are zeroes) and +		   if current min rate is zero - set it to 1. +		   This is a requirement of the algorithm. */  		if (bp->vn_weight_sum && (vn_min_rate == 0))  			vn_min_rate = DEF_MIN_RATE; -		vn_max_rate = ((vn_cfg & FUNC_MF_CFG_MAX_BW_MASK) >> -				FUNC_MF_CFG_MAX_BW_SHIFT) * 100; + +		if (IS_MF_SI(bp)) +			/* maxCfg in percents of linkspeed */ +			vn_max_rate = (bp->link_vars.line_speed * maxCfg) / 100; +		else +			/* maxCfg is absolute in 100Mb units */ +			vn_max_rate = maxCfg * 100;  	}  	DP(NETIF_MSG_IFUP, @@ -2006,7 +2015,8 @@ static void bnx2x_init_vn_minmax(struct bnx2x *bp, int vn)  		m_fair_vn.vn_credit_delta =  			max_t(u32, (vn_min_rate * (T_FAIR_COEF /  						   (8 * bp->vn_weight_sum))), -			      (bp->cmng.fair_vars.fair_threshold * 2)); +			      (bp->cmng.fair_vars.fair_threshold + +							MIN_ABOVE_THRESH));  		DP(NETIF_MSG_IFUP, "m_fair_vn.vn_credit_delta %d\n",  		   m_fair_vn.vn_credit_delta);  	}  |