|
@@ -275,7 +275,8 @@ int mlx5e_dcbnl_ieee_setets_core(struct mlx5e_priv *priv, struct ieee_ets *ets)
|
|
|
}
|
|
|
|
|
|
static int mlx5e_dbcnl_validate_ets(struct net_device *netdev,
|
|
|
- struct ieee_ets *ets)
|
|
|
+ struct ieee_ets *ets,
|
|
|
+ bool zero_sum_allowed)
|
|
|
{
|
|
|
bool have_ets_tc = false;
|
|
|
int bw_sum = 0;
|
|
@@ -300,8 +301,9 @@ static int mlx5e_dbcnl_validate_ets(struct net_device *netdev,
|
|
|
}
|
|
|
|
|
|
if (have_ets_tc && bw_sum != 100) {
|
|
|
- netdev_err(netdev,
|
|
|
- "Failed to validate ETS: BW sum is illegal\n");
|
|
|
+ if (bw_sum || (!bw_sum && !zero_sum_allowed))
|
|
|
+ netdev_err(netdev,
|
|
|
+ "Failed to validate ETS: BW sum is illegal\n");
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
return 0;
|
|
@@ -316,7 +318,7 @@ static int mlx5e_dcbnl_ieee_setets(struct net_device *netdev,
|
|
|
if (!MLX5_CAP_GEN(priv->mdev, ets))
|
|
|
return -EOPNOTSUPP;
|
|
|
|
|
|
- err = mlx5e_dbcnl_validate_ets(netdev, ets);
|
|
|
+ err = mlx5e_dbcnl_validate_ets(netdev, ets, false);
|
|
|
if (err)
|
|
|
return err;
|
|
|
|
|
@@ -642,12 +644,9 @@ static u8 mlx5e_dcbnl_setall(struct net_device *netdev)
|
|
|
ets.prio_tc[i]);
|
|
|
}
|
|
|
|
|
|
- err = mlx5e_dbcnl_validate_ets(netdev, &ets);
|
|
|
- if (err) {
|
|
|
- netdev_err(netdev,
|
|
|
- "%s, Failed to validate ETS: %d\n", __func__, err);
|
|
|
+ err = mlx5e_dbcnl_validate_ets(netdev, &ets, true);
|
|
|
+ if (err)
|
|
|
goto out;
|
|
|
- }
|
|
|
|
|
|
err = mlx5e_dcbnl_ieee_setets_core(priv, &ets);
|
|
|
if (err) {
|