diff --git a/drivers/net/ethernet/netronome/nfp/nic/dcb.c b/drivers/net/ethernet/netronome/nfp/nic/dcb.c index bb498ac6bd7d..91fbfa3708fc 100644 --- a/drivers/net/ethernet/netronome/nfp/nic/dcb.c +++ b/drivers/net/ethernet/netronome/nfp/nic/dcb.c @@ -218,9 +218,6 @@ static int dcb_ets_check(struct net_device *dev, struct ieee_ets *ets) if (ets->tc_tsa[i] == IEEE_8021QAZ_TSA_ETS) { ets_exists = true; sum += ets->tc_tx_bw[i]; - } else if (ets->tc_tx_bw[i]) { - nfp_warn(app->cpp, "ETS BW for strict/vendor TC must be 0."); - return -EINVAL; } } diff --git a/net/dcb/dcbnl.c b/net/dcb/dcbnl.c index 35164bfa563d..ab71f5312876 100644 --- a/net/dcb/dcbnl.c +++ b/net/dcb/dcbnl.c @@ -1578,6 +1578,15 @@ static int dcbnl_ieee_set(struct net_device *netdev, struct nlmsghdr *nlh, if (ieee[DCB_ATTR_IEEE_ETS] && ops->ieee_setets) { struct ieee_ets *ets = nla_data(ieee[DCB_ATTR_IEEE_ETS]); + + /* IEEE 802.1Qaz: BW allocation applies only to ETS TCs */ + for (int i = 0; i < IEEE_8021QAZ_MAX_TCS; i++) { + if (ets->tc_tsa[i] != IEEE_8021QAZ_TSA_ETS && + ets->tc_tx_bw[i]) { + err = -EINVAL; + goto err; + } + } err = ops->ieee_setets(netdev, ets); if (err) goto err;