On Tue, Jun 30, 2026 at 08:06:52AM -0400, Dawid Wesierski wrote: > From: Marek Kasiewicz <[email protected]> > > Allow per-queue bandwidth rate limiting to be configured without > stopping the port when only a single TC node and single QoS element > are involved. This enables dynamic session management where individual > queue pacing rates can be changed while other queues continue > transmitting. > > Also fix the queue ID assignment in the bandwidth configuration to > use the actual TM node ID rather than a sequential counter index, and > only mark the TM hierarchy as committed when the port is stopped to > permit subsequent reconfiguration. > > Signed-off-by: Marek Kasiewicz <[email protected]> > Signed-off-by: Dawid Wesierski <[email protected]> > --- > drivers/net/intel/iavf/iavf_tm.c | 25 ++++++++++++++++--------- > 1 file changed, 16 insertions(+), 9 deletions(-) >
AI review that I ran indicates that this function has some memory leaks around the tc_mapping, q_bw and qtc_map variables, which are allocated using rte_zmalloc. However, those are not introduced by this patch, so ok to take this as-is for now. We should look to ensure leaks are fixed in future patches. (Also, we should ideally change from using rte_zmalloc to regular malloc/calloc, unless there is a strong reason why the need these nodes in hugepage memory). Acked-by: Bruce Richardson <[email protected]> > diff --git a/drivers/net/intel/iavf/iavf_tm.c > b/drivers/net/intel/iavf/iavf_tm.c > index 1cf7bfb106..e3492ec491 100644 > --- a/drivers/net/intel/iavf/iavf_tm.c > +++ b/drivers/net/intel/iavf/iavf_tm.c > @@ -804,19 +804,25 @@ static int iavf_hierarchy_commit(struct rte_eth_dev > *dev, > int index = 0, node_committed = 0; > int i, ret_val = IAVF_SUCCESS; > > - /* check if port is stopped */ > - if (adapter->stopped != 1) { > - PMD_DRV_LOG(ERR, "Please stop port first"); > - ret_val = IAVF_ERR_NOT_READY; > - goto err; > - } > - > if (!(vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_QOS)) { > PMD_DRV_LOG(ERR, "VF queue tc mapping is not supported"); > ret_val = IAVF_NOT_SUPPORTED; > goto fail_clear; > } > > + /* > + * Allow reconfiguration on a running port only when a single queue is > + * involved (single TC node and single QoS element); otherwise the port > + * must be stopped first. qos_cap is valid here because the > + * VIRTCHNL_VF_OFFLOAD_QOS capability was checked above. > + */ > + if ((vf->tm_conf.nb_tc_node != 1 || vf->qos_cap->num_elem != 1) && > + adapter->stopped != 1) { > + PMD_DRV_LOG(ERR, "Please stop port first"); > + ret_val = IAVF_ERR_NOT_READY; > + goto err; > + } > + > /* check if all TC nodes are set with VF vsi */ > if (vf->tm_conf.nb_tc_node != vf->qos_cap->num_elem) { > PMD_DRV_LOG(ERR, "Does not set VF vsi nodes to all TCs"); > @@ -856,7 +862,7 @@ static int iavf_hierarchy_commit(struct rte_eth_dev *dev, > q_tc_mapping->tc[tm_node->tc].req.queue_count++; > > if (tm_node->shaper_profile) { > - q_bw->cfg[node_committed].queue_id = node_committed; > + q_bw->cfg[node_committed].queue_id = tm_node->id; > q_bw->cfg[node_committed].shaper.peak = > tm_node->shaper_profile->profile.peak.rate / > 1000 * IAVF_BITS_PER_BYTE; > @@ -900,7 +906,8 @@ static int iavf_hierarchy_commit(struct rte_eth_dev *dev, > goto fail_clear; > > vf->qtc_map = qtc_map; > - vf->tm_conf.committed = true; > + if (adapter->stopped == 1) > + vf->tm_conf.committed = true; > return ret_val; > > fail_clear: > -- > 2.47.3 > > --------------------------------------------------------------------- > Intel Technology Poland sp. z o.o. > ul. Slowackiego 173 | 80-298 Gdansk | Sad Rejonowy Gdansk Polnoc | VII > Wydzial Gospodarczy Krajowego Rejestru Sadowego - KRS 101882 | NIP > 957-07-52-316 | Kapital zakladowy 200.000 PLN. > Spolka oswiadcza, ze posiada status duzego przedsiebiorcy w rozumieniu ustawy > z dnia 8 marca 2013 r. o przeciwdzialaniu nadmiernym opoznieniom w > transakcjach handlowych. > > Ta wiadomosc wraz z zalacznikami jest przeznaczona dla okreslonego adresata i > moze zawierac informacje poufne. W razie przypadkowego otrzymania tej > wiadomosci, prosimy o powiadomienie nadawcy oraz trwale jej usuniecie; > jakiekolwiek przegladanie lub rozpowszechnianie jest zabronione. > This e-mail and any attachments may contain confidential material for the > sole use of the intended recipient(s). If you are not the intended recipient, > please contact the sender and delete all copies; any review or distribution > by others is strictly prohibited. >

