mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 18:41:58 +09:00
ice: Fix max_rate check while configuring TX rate limits
[ Upstream commit5f16da6ee6] Remove incorrect check in ice_validate_mqprio_opt() that limits filter configuration when sum of max_rates of all TCs exceeds the link speed. The max rate of each TC is unrelated to value used by other TCs and is valid as long as it is less than link speed. Fixes:fbc7b27af0("ice: enable ndo_setup_tc support for mqprio_qdisc") Signed-off-by: Sridhar Samudrala <sridhar.samudrala@intel.com> Signed-off-by: Sudheer Mogilappagari <sudheer.mogilappagari@intel.com> Tested-by: Bharathi Sreenivas <bharathi.sreenivas@intel.com> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
1294311ce9
commit
dfaed769b9
@@ -7852,10 +7852,10 @@ static int
|
||||
ice_validate_mqprio_qopt(struct ice_vsi *vsi,
|
||||
struct tc_mqprio_qopt_offload *mqprio_qopt)
|
||||
{
|
||||
u64 sum_max_rate = 0, sum_min_rate = 0;
|
||||
int non_power_of_2_qcount = 0;
|
||||
struct ice_pf *pf = vsi->back;
|
||||
int max_rss_q_cnt = 0;
|
||||
u64 sum_min_rate = 0;
|
||||
struct device *dev;
|
||||
int i, speed;
|
||||
u8 num_tc;
|
||||
@@ -7871,6 +7871,7 @@ ice_validate_mqprio_qopt(struct ice_vsi *vsi,
|
||||
dev = ice_pf_to_dev(pf);
|
||||
vsi->ch_rss_size = 0;
|
||||
num_tc = mqprio_qopt->qopt.num_tc;
|
||||
speed = ice_get_link_speed_kbps(vsi);
|
||||
|
||||
for (i = 0; num_tc; i++) {
|
||||
int qcount = mqprio_qopt->qopt.count[i];
|
||||
@@ -7911,7 +7912,6 @@ ice_validate_mqprio_qopt(struct ice_vsi *vsi,
|
||||
*/
|
||||
max_rate = mqprio_qopt->max_rate[i];
|
||||
max_rate = div_u64(max_rate, ICE_BW_KBPS_DIVISOR);
|
||||
sum_max_rate += max_rate;
|
||||
|
||||
/* min_rate is minimum guaranteed rate and it can't be zero */
|
||||
min_rate = mqprio_qopt->min_rate[i];
|
||||
@@ -7924,6 +7924,12 @@ ice_validate_mqprio_qopt(struct ice_vsi *vsi,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (max_rate && max_rate > speed) {
|
||||
dev_err(dev, "TC%d: max_rate(%llu Kbps) > link speed of %u Kbps\n",
|
||||
i, max_rate, speed);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
iter_div_u64_rem(min_rate, ICE_MIN_BW_LIMIT, &rem);
|
||||
if (rem) {
|
||||
dev_err(dev, "TC%d: Min Rate not multiple of %u Kbps",
|
||||
@@ -7961,12 +7967,6 @@ ice_validate_mqprio_qopt(struct ice_vsi *vsi,
|
||||
(mqprio_qopt->qopt.offset[i] + mqprio_qopt->qopt.count[i]))
|
||||
return -EINVAL;
|
||||
|
||||
speed = ice_get_link_speed_kbps(vsi);
|
||||
if (sum_max_rate && sum_max_rate > (u64)speed) {
|
||||
dev_err(dev, "Invalid max Tx rate(%llu) Kbps > speed(%u) Kbps specified\n",
|
||||
sum_max_rate, speed);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (sum_min_rate && sum_min_rate > (u64)speed) {
|
||||
dev_err(dev, "Invalid min Tx rate(%llu) Kbps > speed (%u) Kbps specified\n",
|
||||
sum_min_rate, speed);
|
||||
|
||||
Reference in New Issue
Block a user