* [PATCH 0/4] Fix i40e/iavf queue reconfig and restarting @ 2023-08-30 15:59 Bruce Richardson 2023-08-30 15:59 ` [PATCH 1/4] net/i40e: fix buffer leak on Rx reconfiguration Bruce Richardson ` (4 more replies) 0 siblings, 5 replies; 18+ messages in thread From: Bruce Richardson @ 2023-08-30 15:59 UTC (permalink / raw) To: dev; +Cc: Yuying Zhang, Beilei Xing, Jingjing Wu, Bruce Richardson Fixes for a number of issues found when looking at stopping and restarting individual queues, sometimes with a reconfig in the middle. For i40e, it already claims to support runtime reconfig, while for iavf this support is not claimed, but appears to work ok once the bugs in the cleanup code are fixed, therefore the last patch enables it, by setting the appropriate capability flag. Bruce Richardson (4): net/i40e: fix buffer leak on Rx reconfiguration net/iavf: fix buffer leak on Tx queue stop net/iavf: fix restart of Rx queue on reconfigure net/iavf: add support for runtime queue reconfiguration doc/guides/nics/features/iavf.ini | 2 ++ drivers/net/i40e/i40e_rxtx.c | 6 ++++++ drivers/net/i40e/i40e_rxtx_vec_common.h | 1 + drivers/net/iavf/iavf_ethdev.c | 4 +++- drivers/net/iavf/iavf_rxtx.c | 6 ++++++ drivers/net/iavf/iavf_rxtx_vec_avx512.c | 17 ++++++++--------- drivers/net/iavf/iavf_rxtx_vec_common.h | 11 +++++------ 7 files changed, 31 insertions(+), 16 deletions(-) -- 2.39.2 ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 1/4] net/i40e: fix buffer leak on Rx reconfiguration 2023-08-30 15:59 [PATCH 0/4] Fix i40e/iavf queue reconfig and restarting Bruce Richardson @ 2023-08-30 15:59 ` Bruce Richardson 2023-08-30 15:59 ` [PATCH 2/4] net/iavf: fix buffer leak on Tx queue stop Bruce Richardson ` (3 subsequent siblings) 4 siblings, 0 replies; 18+ messages in thread From: Bruce Richardson @ 2023-08-30 15:59 UTC (permalink / raw) To: dev Cc: Yuying Zhang, Beilei Xing, Jingjing Wu, Bruce Richardson, qi.z.zhang, stable When reconfiguring a single queue on a device, the mbuf initializer value was not getting set, and remained at zero. This lead to mbuf leaks as the refcount was incorrect (0), so on free it wrapped around to UINT16_MAX. When setting up the mbuf initializer, also ensure that the queue is explicitly marked as using a vector function by setting the "rx_using_sse" flag. Fixes: a3c83a2527e1 ("net/i40e: enable runtime queue setup") Cc: qi.z.zhang@intel.com Cc: stable@dpdk.org Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> --- drivers/net/i40e/i40e_rxtx.c | 6 ++++++ drivers/net/i40e/i40e_rxtx_vec_common.h | 1 + 2 files changed, 7 insertions(+) diff --git a/drivers/net/i40e/i40e_rxtx.c b/drivers/net/i40e/i40e_rxtx.c index b4f65b58fa..d96bbbb677 100644 --- a/drivers/net/i40e/i40e_rxtx.c +++ b/drivers/net/i40e/i40e_rxtx.c @@ -1918,6 +1918,12 @@ i40e_dev_rx_queue_setup_runtime(struct rte_eth_dev *dev, if (use_def_burst_func) ad->rx_bulk_alloc_allowed = false; i40e_set_rx_function(dev); + + if (ad->rx_vec_allowed && i40e_rxq_vec_setup(rxq)) { + PMD_DRV_LOG(ERR, "Failed vector rx setup."); + return -EINVAL; + } + return 0; } else if (ad->rx_vec_allowed && !rte_is_power_of_2(rxq->nb_rx_desc)) { PMD_DRV_LOG(ERR, "Vector mode is allowed, but descriptor" diff --git a/drivers/net/i40e/i40e_rxtx_vec_common.h b/drivers/net/i40e/i40e_rxtx_vec_common.h index fe1a6ec75e..8b745630e4 100644 --- a/drivers/net/i40e/i40e_rxtx_vec_common.h +++ b/drivers/net/i40e/i40e_rxtx_vec_common.h @@ -201,6 +201,7 @@ i40e_rxq_vec_setup_default(struct i40e_rx_queue *rxq) rte_compiler_barrier(); p = (uintptr_t)&mb_def.rearm_data; rxq->mbuf_initializer = *(uint64_t *)p; + rxq->rx_using_sse = 1; return 0; } -- 2.39.2 ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 2/4] net/iavf: fix buffer leak on Tx queue stop 2023-08-30 15:59 [PATCH 0/4] Fix i40e/iavf queue reconfig and restarting Bruce Richardson 2023-08-30 15:59 ` [PATCH 1/4] net/i40e: fix buffer leak on Rx reconfiguration Bruce Richardson @ 2023-08-30 15:59 ` Bruce Richardson 2023-08-30 15:59 ` [PATCH 3/4] net/iavf: fix restart of Rx queue on reconfigure Bruce Richardson ` (2 subsequent siblings) 4 siblings, 0 replies; 18+ messages in thread From: Bruce Richardson @ 2023-08-30 15:59 UTC (permalink / raw) To: dev Cc: Yuying Zhang, Beilei Xing, Jingjing Wu, Bruce Richardson, wenzhuo.lu, stable When a queue is stopped all buffers are meant to released from it, and then a new set of buffers reallocated on start. For the iavf code when using vector Tx, some buffers were left in the ring, and so those buffers were leaked. The buffers were missed as the release code only handled one side of a wrap-around case in the ring. Fix the issue by doing a single iteration of the ring freeing all buffers in it, handling wraparound through a simple post-increment check. Fixes: 319c421f3890 ("net/avf: enable SSE Rx Tx") Fixes: 9ab9514c150e ("net/iavf: enable AVX512 for Tx") Cc: wenzhuo.lu@intel.com Cc: jingjing.wu@intel.com Cc: stable@dpdk.org Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> --- drivers/net/iavf/iavf_rxtx_vec_avx512.c | 17 ++++++++--------- drivers/net/iavf/iavf_rxtx_vec_common.h | 11 +++++------ 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/drivers/net/iavf/iavf_rxtx_vec_avx512.c b/drivers/net/iavf/iavf_rxtx_vec_avx512.c index 3e66df5341..48337d5e03 100644 --- a/drivers/net/iavf/iavf_rxtx_vec_avx512.c +++ b/drivers/net/iavf/iavf_rxtx_vec_avx512.c @@ -2460,20 +2460,19 @@ iavf_tx_queue_release_mbufs_avx512(struct iavf_tx_queue *txq) { unsigned int i; const uint16_t max_desc = (uint16_t)(txq->nb_tx_desc - 1); + const uint16_t end_desc = txq->tx_tail >> txq->use_ctx; /* next empty slot */ + const uint16_t wrap_point = txq->nb_tx_desc >> txq->use_ctx; /* end of SW ring */ struct iavf_tx_vec_entry *swr = (void *)txq->sw_ring; if (!txq->sw_ring || txq->nb_free == max_desc) return; - i = (txq->next_dd >> txq->use_ctx) + 1 - - (txq->rs_thresh >> txq->use_ctx); - - if (txq->tx_tail < i) { - for (; i < (unsigned int)(txq->nb_tx_desc >> txq->use_ctx); i++) { - rte_pktmbuf_free_seg(swr[i].mbuf); - swr[i].mbuf = NULL; - } - i = 0; + i = (txq->next_dd - txq->rs_thresh + 1) >> txq->use_ctx; + while (i != end_desc) { + rte_pktmbuf_free_seg(swr[i].mbuf); + swr[i].mbuf = NULL; + if (++i == wrap_point) + i = 0; } } diff --git a/drivers/net/iavf/iavf_rxtx_vec_common.h b/drivers/net/iavf/iavf_rxtx_vec_common.h index ddb13ce8c3..1fac957fe1 100644 --- a/drivers/net/iavf/iavf_rxtx_vec_common.h +++ b/drivers/net/iavf/iavf_rxtx_vec_common.h @@ -186,12 +186,11 @@ _iavf_tx_queue_release_mbufs_vec(struct iavf_tx_queue *txq) return; i = txq->next_dd - txq->rs_thresh + 1; - if (txq->tx_tail < i) { - for (; i < txq->nb_tx_desc; i++) { - rte_pktmbuf_free_seg(txq->sw_ring[i].mbuf); - txq->sw_ring[i].mbuf = NULL; - } - i = 0; + while (i != txq->tx_tail) { + rte_pktmbuf_free_seg(txq->sw_ring[i].mbuf); + txq->sw_ring[i].mbuf = NULL; + if (++i == txq->nb_tx_desc) + i = 0; } } -- 2.39.2 ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 3/4] net/iavf: fix restart of Rx queue on reconfigure 2023-08-30 15:59 [PATCH 0/4] Fix i40e/iavf queue reconfig and restarting Bruce Richardson 2023-08-30 15:59 ` [PATCH 1/4] net/i40e: fix buffer leak on Rx reconfiguration Bruce Richardson 2023-08-30 15:59 ` [PATCH 2/4] net/iavf: fix buffer leak on Tx queue stop Bruce Richardson @ 2023-08-30 15:59 ` Bruce Richardson 2023-08-30 15:59 ` [PATCH 4/4] net/iavf: add support for runtime queue reconfiguration Bruce Richardson 2023-08-31 12:33 ` [PATCH v2 0/4] Fix i40e/iavf queue reconfig and restarting Bruce Richardson 4 siblings, 0 replies; 18+ messages in thread From: Bruce Richardson @ 2023-08-30 15:59 UTC (permalink / raw) To: dev; +Cc: Yuying Zhang, Beilei Xing, Jingjing Wu, Bruce Richardson, stable After reconfiguring an RX queue the mbuf_initializer value was not being correctly set. Fix this by calling the appropriate function if vector processing is enabled. This mirrors the behaviour by the i40e driver. Fixes: 319c421f3890 ("net/avf: enable SSE Rx Tx") Cc: jingjing.wu@intel.com Cc: stable@dpdk.org Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> --- drivers/net/iavf/iavf_rxtx.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/net/iavf/iavf_rxtx.c b/drivers/net/iavf/iavf_rxtx.c index f7df4665d1..347f686831 100644 --- a/drivers/net/iavf/iavf_rxtx.c +++ b/drivers/net/iavf/iavf_rxtx.c @@ -755,6 +755,12 @@ iavf_dev_rx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, if (check_rx_vec_allow(rxq) == false) ad->rx_vec_allowed = false; + /* check vector conflict */ + if (ad->rx_vec_allowed && iavf_rxq_vec_setup(rxq)) { + PMD_DRV_LOG(ERR, "Failed vector rx setup."); + return -EINVAL; + } + return 0; } -- 2.39.2 ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 4/4] net/iavf: add support for runtime queue reconfiguration 2023-08-30 15:59 [PATCH 0/4] Fix i40e/iavf queue reconfig and restarting Bruce Richardson ` (2 preceding siblings ...) 2023-08-30 15:59 ` [PATCH 3/4] net/iavf: fix restart of Rx queue on reconfigure Bruce Richardson @ 2023-08-30 15:59 ` Bruce Richardson 2023-08-31 12:33 ` [PATCH v2 0/4] Fix i40e/iavf queue reconfig and restarting Bruce Richardson 4 siblings, 0 replies; 18+ messages in thread From: Bruce Richardson @ 2023-08-30 15:59 UTC (permalink / raw) To: dev; +Cc: Yuying Zhang, Beilei Xing, Jingjing Wu, Bruce Richardson Unlike the i40e driver, the iavf driver does not advertise support for runtime reconfiguration, meaning that application using the same hardware may get different behaviour when using a PF vs a VF. On testing with a 40G NIC, the only blocker to reconfiguring an RX queue on the fly is the fact that this support is not advertised by the driver. Add support for runtime reconfig by reporting it in the device info flags. Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> --- doc/guides/nics/features/iavf.ini | 2 ++ drivers/net/iavf/iavf_ethdev.c | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/doc/guides/nics/features/iavf.ini b/doc/guides/nics/features/iavf.ini index b72cd98484..db4f92ce71 100644 --- a/doc/guides/nics/features/iavf.ini +++ b/doc/guides/nics/features/iavf.ini @@ -11,6 +11,8 @@ Speed capabilities = Y Link status = Y Rx interrupt = Y Queue start/stop = Y +Runtime Rx queue setup = Y +Runtime Tx queue setup = Y Power mgmt address monitor = Y MTU update = Y Scattered Rx = Y diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c index f2fc5a5621..22fbd7d6b2 100644 --- a/drivers/net/iavf/iavf_ethdev.c +++ b/drivers/net/iavf/iavf_ethdev.c @@ -1127,7 +1127,9 @@ iavf_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) dev_info->reta_size = vf->vf_res->rss_lut_size; dev_info->flow_type_rss_offloads = IAVF_RSS_OFFLOAD_ALL; dev_info->max_mac_addrs = IAVF_NUM_MACADDR_MAX; - dev_info->dev_capa &= ~RTE_ETH_DEV_CAPA_FLOW_RULE_KEEP; + dev_info->dev_capa = + RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP | + RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP; dev_info->rx_offload_capa = RTE_ETH_RX_OFFLOAD_VLAN_STRIP | RTE_ETH_RX_OFFLOAD_QINQ_STRIP | -- 2.39.2 ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH v2 0/4] Fix i40e/iavf queue reconfig and restarting 2023-08-30 15:59 [PATCH 0/4] Fix i40e/iavf queue reconfig and restarting Bruce Richardson ` (3 preceding siblings ...) 2023-08-30 15:59 ` [PATCH 4/4] net/iavf: add support for runtime queue reconfiguration Bruce Richardson @ 2023-08-31 12:33 ` Bruce Richardson 2023-08-31 12:33 ` [PATCH v2 1/4] net/i40e: fix buffer leak on Rx reconfiguration Bruce Richardson ` (3 more replies) 4 siblings, 4 replies; 18+ messages in thread From: Bruce Richardson @ 2023-08-31 12:33 UTC (permalink / raw) To: dev; +Cc: Bruce Richardson Fixes for a number of issues found when looking at stopping and restarting individual queues, sometimes with a reconfig in the middle. For i40e, it already claims to support runtime reconfig, while for iavf this support is not claimed, but appears to work ok once the bugs in the cleanup code are fixed, therefore the last patch enables it, by setting the appropriate capability flag. --- V2: Fix build issues with non-x86, non-arm architectures reported by the CI. Bruce Richardson (4): net/i40e: fix buffer leak on Rx reconfiguration net/iavf: fix buffer leak on Tx queue stop net/iavf: fix restart of Rx queue on reconfigure net/iavf: add support for runtime queue reconfiguration doc/guides/nics/features/iavf.ini | 2 ++ drivers/net/i40e/i40e_rxtx.c | 6 ++++++ drivers/net/i40e/i40e_rxtx_vec_common.h | 1 + drivers/net/iavf/iavf_ethdev.c | 4 +++- drivers/net/iavf/iavf_rxtx.c | 7 +++++++ drivers/net/iavf/iavf_rxtx_vec_avx512.c | 17 ++++++++--------- drivers/net/iavf/iavf_rxtx_vec_common.h | 11 +++++------ 7 files changed, 32 insertions(+), 16 deletions(-) -- 2.39.2 ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH v2 1/4] net/i40e: fix buffer leak on Rx reconfiguration 2023-08-31 12:33 ` [PATCH v2 0/4] Fix i40e/iavf queue reconfig and restarting Bruce Richardson @ 2023-08-31 12:33 ` Bruce Richardson 2023-09-01 7:12 ` Zhang, Qi Z 2023-08-31 12:33 ` [PATCH v2 2/4] net/iavf: fix buffer leak on Tx queue stop Bruce Richardson ` (2 subsequent siblings) 3 siblings, 1 reply; 18+ messages in thread From: Bruce Richardson @ 2023-08-31 12:33 UTC (permalink / raw) To: dev; +Cc: Bruce Richardson, qi.z.zhang, stable When reconfiguring a single queue on a device, the mbuf initializer value was not getting set, and remained at zero. This lead to mbuf leaks as the refcount was incorrect (0), so on free it wrapped around to UINT16_MAX. When setting up the mbuf initializer, also ensure that the queue is explicitly marked as using a vector function by setting the "rx_using_sse" flag. Fixes: a3c83a2527e1 ("net/i40e: enable runtime queue setup") Cc: qi.z.zhang@intel.com Cc: stable@dpdk.org Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> --- drivers/net/i40e/i40e_rxtx.c | 6 ++++++ drivers/net/i40e/i40e_rxtx_vec_common.h | 1 + 2 files changed, 7 insertions(+) diff --git a/drivers/net/i40e/i40e_rxtx.c b/drivers/net/i40e/i40e_rxtx.c index b4f65b58fa..d96bbbb677 100644 --- a/drivers/net/i40e/i40e_rxtx.c +++ b/drivers/net/i40e/i40e_rxtx.c @@ -1918,6 +1918,12 @@ i40e_dev_rx_queue_setup_runtime(struct rte_eth_dev *dev, if (use_def_burst_func) ad->rx_bulk_alloc_allowed = false; i40e_set_rx_function(dev); + + if (ad->rx_vec_allowed && i40e_rxq_vec_setup(rxq)) { + PMD_DRV_LOG(ERR, "Failed vector rx setup."); + return -EINVAL; + } + return 0; } else if (ad->rx_vec_allowed && !rte_is_power_of_2(rxq->nb_rx_desc)) { PMD_DRV_LOG(ERR, "Vector mode is allowed, but descriptor" diff --git a/drivers/net/i40e/i40e_rxtx_vec_common.h b/drivers/net/i40e/i40e_rxtx_vec_common.h index fe1a6ec75e..8b745630e4 100644 --- a/drivers/net/i40e/i40e_rxtx_vec_common.h +++ b/drivers/net/i40e/i40e_rxtx_vec_common.h @@ -201,6 +201,7 @@ i40e_rxq_vec_setup_default(struct i40e_rx_queue *rxq) rte_compiler_barrier(); p = (uintptr_t)&mb_def.rearm_data; rxq->mbuf_initializer = *(uint64_t *)p; + rxq->rx_using_sse = 1; return 0; } -- 2.39.2 ^ permalink raw reply [flat|nested] 18+ messages in thread
* RE: [PATCH v2 1/4] net/i40e: fix buffer leak on Rx reconfiguration 2023-08-31 12:33 ` [PATCH v2 1/4] net/i40e: fix buffer leak on Rx reconfiguration Bruce Richardson @ 2023-09-01 7:12 ` Zhang, Qi Z 0 siblings, 0 replies; 18+ messages in thread From: Zhang, Qi Z @ 2023-09-01 7:12 UTC (permalink / raw) To: Richardson, Bruce, dev; +Cc: stable > -----Original Message----- > From: Richardson, Bruce <bruce.richardson@intel.com> > Sent: Thursday, August 31, 2023 8:34 PM > To: dev@dpdk.org > Cc: Richardson, Bruce <bruce.richardson@intel.com>; Zhang, Qi Z > <qi.z.zhang@intel.com>; stable@dpdk.org > Subject: [PATCH v2 1/4] net/i40e: fix buffer leak on Rx reconfiguration > > When reconfiguring a single queue on a device, the mbuf initializer value was > not getting set, and remained at zero. This lead to mbuf leaks as the refcount > was incorrect (0), so on free it wrapped around to UINT16_MAX. When > setting up the mbuf initializer, also ensure that the queue is explicitly marked > as using a vector function by setting the "rx_using_sse" flag. > > Fixes: a3c83a2527e1 ("net/i40e: enable runtime queue setup") > Cc: qi.z.zhang@intel.com > Cc: stable@dpdk.org > > Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> > --- > drivers/net/i40e/i40e_rxtx.c | 6 ++++++ > drivers/net/i40e/i40e_rxtx_vec_common.h | 1 + > 2 files changed, 7 insertions(+) > > diff --git a/drivers/net/i40e/i40e_rxtx.c b/drivers/net/i40e/i40e_rxtx.c index > b4f65b58fa..d96bbbb677 100644 > --- a/drivers/net/i40e/i40e_rxtx.c > +++ b/drivers/net/i40e/i40e_rxtx.c > @@ -1918,6 +1918,12 @@ i40e_dev_rx_queue_setup_runtime(struct > rte_eth_dev *dev, > if (use_def_burst_func) > ad->rx_bulk_alloc_allowed = false; > i40e_set_rx_function(dev); > + > + if (ad->rx_vec_allowed && i40e_rxq_vec_setup(rxq)) { > + PMD_DRV_LOG(ERR, "Failed vector rx setup."); > + return -EINVAL; > + } > + > return 0; > } else if (ad->rx_vec_allowed && !rte_is_power_of_2(rxq- > >nb_rx_desc)) { > PMD_DRV_LOG(ERR, "Vector mode is allowed, but > descriptor" > diff --git a/drivers/net/i40e/i40e_rxtx_vec_common.h > b/drivers/net/i40e/i40e_rxtx_vec_common.h > index fe1a6ec75e..8b745630e4 100644 > --- a/drivers/net/i40e/i40e_rxtx_vec_common.h > +++ b/drivers/net/i40e/i40e_rxtx_vec_common.h > @@ -201,6 +201,7 @@ i40e_rxq_vec_setup_default(struct i40e_rx_queue > *rxq) > rte_compiler_barrier(); > p = (uintptr_t)&mb_def.rearm_data; > rxq->mbuf_initializer = *(uint64_t *)p; > + rxq->rx_using_sse = 1; I saw some further code clean can be done by leveraging this change. > return 0; > } > > -- > 2.39.2 Acked-by: Qi Zhang <qi.z.zhang@intel.com> Applied to dpdk-next-net-intel. Thanks Qi ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH v2 2/4] net/iavf: fix buffer leak on Tx queue stop 2023-08-31 12:33 ` [PATCH v2 0/4] Fix i40e/iavf queue reconfig and restarting Bruce Richardson 2023-08-31 12:33 ` [PATCH v2 1/4] net/i40e: fix buffer leak on Rx reconfiguration Bruce Richardson @ 2023-08-31 12:33 ` Bruce Richardson 2023-09-04 2:17 ` Lu, Wenzhuo 2023-08-31 12:33 ` [PATCH v2 3/4] net/iavf: fix restart of Rx queue on reconfigure Bruce Richardson 2023-08-31 12:33 ` [PATCH v2 4/4] net/iavf: add support for runtime queue reconfiguration Bruce Richardson 3 siblings, 1 reply; 18+ messages in thread From: Bruce Richardson @ 2023-08-31 12:33 UTC (permalink / raw) To: dev; +Cc: Bruce Richardson, wenzhuo.lu, jingjing.wu, stable When a queue is stopped all buffers are meant to released from it, and then a new set of buffers reallocated on start. For the iavf code when using vector Tx, some buffers were left in the ring, and so those buffers were leaked. The buffers were missed as the release code only handled one side of a wrap-around case in the ring. Fix the issue by doing a single iteration of the ring freeing all buffers in it, handling wraparound through a simple post-increment check. Fixes: 319c421f3890 ("net/avf: enable SSE Rx Tx") Fixes: 9ab9514c150e ("net/iavf: enable AVX512 for Tx") Cc: wenzhuo.lu@intel.com Cc: jingjing.wu@intel.com Cc: stable@dpdk.org Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> --- drivers/net/iavf/iavf_rxtx_vec_avx512.c | 17 ++++++++--------- drivers/net/iavf/iavf_rxtx_vec_common.h | 11 +++++------ 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/drivers/net/iavf/iavf_rxtx_vec_avx512.c b/drivers/net/iavf/iavf_rxtx_vec_avx512.c index 3e66df5341..48337d5e03 100644 --- a/drivers/net/iavf/iavf_rxtx_vec_avx512.c +++ b/drivers/net/iavf/iavf_rxtx_vec_avx512.c @@ -2460,20 +2460,19 @@ iavf_tx_queue_release_mbufs_avx512(struct iavf_tx_queue *txq) { unsigned int i; const uint16_t max_desc = (uint16_t)(txq->nb_tx_desc - 1); + const uint16_t end_desc = txq->tx_tail >> txq->use_ctx; /* next empty slot */ + const uint16_t wrap_point = txq->nb_tx_desc >> txq->use_ctx; /* end of SW ring */ struct iavf_tx_vec_entry *swr = (void *)txq->sw_ring; if (!txq->sw_ring || txq->nb_free == max_desc) return; - i = (txq->next_dd >> txq->use_ctx) + 1 - - (txq->rs_thresh >> txq->use_ctx); - - if (txq->tx_tail < i) { - for (; i < (unsigned int)(txq->nb_tx_desc >> txq->use_ctx); i++) { - rte_pktmbuf_free_seg(swr[i].mbuf); - swr[i].mbuf = NULL; - } - i = 0; + i = (txq->next_dd - txq->rs_thresh + 1) >> txq->use_ctx; + while (i != end_desc) { + rte_pktmbuf_free_seg(swr[i].mbuf); + swr[i].mbuf = NULL; + if (++i == wrap_point) + i = 0; } } diff --git a/drivers/net/iavf/iavf_rxtx_vec_common.h b/drivers/net/iavf/iavf_rxtx_vec_common.h index ddb13ce8c3..1fac957fe1 100644 --- a/drivers/net/iavf/iavf_rxtx_vec_common.h +++ b/drivers/net/iavf/iavf_rxtx_vec_common.h @@ -186,12 +186,11 @@ _iavf_tx_queue_release_mbufs_vec(struct iavf_tx_queue *txq) return; i = txq->next_dd - txq->rs_thresh + 1; - if (txq->tx_tail < i) { - for (; i < txq->nb_tx_desc; i++) { - rte_pktmbuf_free_seg(txq->sw_ring[i].mbuf); - txq->sw_ring[i].mbuf = NULL; - } - i = 0; + while (i != txq->tx_tail) { + rte_pktmbuf_free_seg(txq->sw_ring[i].mbuf); + txq->sw_ring[i].mbuf = NULL; + if (++i == txq->nb_tx_desc) + i = 0; } } -- 2.39.2 ^ permalink raw reply [flat|nested] 18+ messages in thread
* RE: [PATCH v2 2/4] net/iavf: fix buffer leak on Tx queue stop 2023-08-31 12:33 ` [PATCH v2 2/4] net/iavf: fix buffer leak on Tx queue stop Bruce Richardson @ 2023-09-04 2:17 ` Lu, Wenzhuo 2023-09-04 2:30 ` Zhang, Qi Z 0 siblings, 1 reply; 18+ messages in thread From: Lu, Wenzhuo @ 2023-09-04 2:17 UTC (permalink / raw) To: Richardson, Bruce, dev; +Cc: Wu, Jingjing, stable > -----Original Message----- > From: Richardson, Bruce <bruce.richardson@intel.com> > Sent: Thursday, August 31, 2023 8:34 PM > To: dev@dpdk.org > Cc: Richardson, Bruce <bruce.richardson@intel.com>; Lu, Wenzhuo > <wenzhuo.lu@intel.com>; Wu, Jingjing <jingjing.wu@intel.com>; > stable@dpdk.org > Subject: [PATCH v2 2/4] net/iavf: fix buffer leak on Tx queue stop > > When a queue is stopped all buffers are meant to released from it, and then a > new set of buffers reallocated on start. For the iavf code when using vector Tx, > some buffers were left in the ring, and so those buffers were leaked. The > buffers were missed as the release code only handled one side of a > wrap-around case in the ring. > > Fix the issue by doing a single iteration of the ring freeing all buffers in it, > handling wraparound through a simple post-increment check. > > Fixes: 319c421f3890 ("net/avf: enable SSE Rx Tx") > Fixes: 9ab9514c150e ("net/iavf: enable AVX512 for Tx") > Cc: wenzhuo.lu@intel.com > Cc: jingjing.wu@intel.com > Cc: stable@dpdk.org > > Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> Acked-by: Wenzhuo Lu <wenzhuo.lu@intel.com> ^ permalink raw reply [flat|nested] 18+ messages in thread
* RE: [PATCH v2 2/4] net/iavf: fix buffer leak on Tx queue stop 2023-09-04 2:17 ` Lu, Wenzhuo @ 2023-09-04 2:30 ` Zhang, Qi Z 0 siblings, 0 replies; 18+ messages in thread From: Zhang, Qi Z @ 2023-09-04 2:30 UTC (permalink / raw) To: Lu, Wenzhuo, Richardson, Bruce, dev; +Cc: Wu, Jingjing, stable > -----Original Message----- > From: Lu, Wenzhuo <wenzhuo.lu@intel.com> > Sent: Monday, September 4, 2023 10:18 AM > To: Richardson, Bruce <bruce.richardson@intel.com>; dev@dpdk.org > Cc: Wu, Jingjing <jingjing.wu@intel.com>; stable@dpdk.org > Subject: RE: [PATCH v2 2/4] net/iavf: fix buffer leak on Tx queue stop > > > > > -----Original Message----- > > From: Richardson, Bruce <bruce.richardson@intel.com> > > Sent: Thursday, August 31, 2023 8:34 PM > > To: dev@dpdk.org > > Cc: Richardson, Bruce <bruce.richardson@intel.com>; Lu, Wenzhuo > > <wenzhuo.lu@intel.com>; Wu, Jingjing <jingjing.wu@intel.com>; > > stable@dpdk.org > > Subject: [PATCH v2 2/4] net/iavf: fix buffer leak on Tx queue stop > > > > When a queue is stopped all buffers are meant to released from it, and > > then a new set of buffers reallocated on start. For the iavf code when > > using vector Tx, some buffers were left in the ring, and so those > > buffers were leaked. The buffers were missed as the release code only > > handled one side of a wrap-around case in the ring. > > > > Fix the issue by doing a single iteration of the ring freeing all > > buffers in it, handling wraparound through a simple post-increment check. > > > > Fixes: 319c421f3890 ("net/avf: enable SSE Rx Tx") > > Fixes: 9ab9514c150e ("net/iavf: enable AVX512 for Tx") > > Cc: wenzhuo.lu@intel.com > > Cc: jingjing.wu@intel.com > > Cc: stable@dpdk.org > > > > Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> > Acked-by: Wenzhuo Lu <wenzhuo.lu@intel.com> Applied to dpdk-next-net-intel. Thanks Qi ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH v2 3/4] net/iavf: fix restart of Rx queue on reconfigure 2023-08-31 12:33 ` [PATCH v2 0/4] Fix i40e/iavf queue reconfig and restarting Bruce Richardson 2023-08-31 12:33 ` [PATCH v2 1/4] net/i40e: fix buffer leak on Rx reconfiguration Bruce Richardson 2023-08-31 12:33 ` [PATCH v2 2/4] net/iavf: fix buffer leak on Tx queue stop Bruce Richardson @ 2023-08-31 12:33 ` Bruce Richardson 2023-09-04 1:15 ` Zhang, Qi Z 2023-08-31 12:33 ` [PATCH v2 4/4] net/iavf: add support for runtime queue reconfiguration Bruce Richardson 3 siblings, 1 reply; 18+ messages in thread From: Bruce Richardson @ 2023-08-31 12:33 UTC (permalink / raw) To: dev; +Cc: Bruce Richardson, jingjing.wu, stable After reconfiguring an RX queue the mbuf_initializer value was not being correctly set. Fix this by calling the appropriate function if vector processing is enabled. This mirrors the behaviour by the i40e driver. Fixes: 319c421f3890 ("net/avf: enable SSE Rx Tx") Cc: jingjing.wu@intel.com Cc: stable@dpdk.org Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> --- drivers/net/iavf/iavf_rxtx.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/net/iavf/iavf_rxtx.c b/drivers/net/iavf/iavf_rxtx.c index f7df4665d1..797cdda4b2 100644 --- a/drivers/net/iavf/iavf_rxtx.c +++ b/drivers/net/iavf/iavf_rxtx.c @@ -755,6 +755,13 @@ iavf_dev_rx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, if (check_rx_vec_allow(rxq) == false) ad->rx_vec_allowed = false; +#if defined RTE_ARCH_X86 || defined RTE_ARCH_ARM + /* check vector conflict */ + if (ad->rx_vec_allowed && iavf_rxq_vec_setup(rxq)) { + PMD_DRV_LOG(ERR, "Failed vector rx setup."); + return -EINVAL; + } +#endif return 0; } -- 2.39.2 ^ permalink raw reply [flat|nested] 18+ messages in thread
* RE: [PATCH v2 3/4] net/iavf: fix restart of Rx queue on reconfigure 2023-08-31 12:33 ` [PATCH v2 3/4] net/iavf: fix restart of Rx queue on reconfigure Bruce Richardson @ 2023-09-04 1:15 ` Zhang, Qi Z 2023-09-04 1:30 ` Zhang, Qi Z 0 siblings, 1 reply; 18+ messages in thread From: Zhang, Qi Z @ 2023-09-04 1:15 UTC (permalink / raw) To: Richardson, Bruce, dev; +Cc: Richardson, Bruce, Wu, Jingjing, stable > -----Original Message----- > From: Bruce Richardson <bruce.richardson@intel.com> > Sent: Thursday, August 31, 2023 8:34 PM > To: dev@dpdk.org > Cc: Richardson, Bruce <bruce.richardson@intel.com>; Wu, Jingjing > <jingjing.wu@intel.com>; stable@dpdk.org > Subject: [PATCH v2 3/4] net/iavf: fix restart of Rx queue on reconfigure > > After reconfiguring an RX queue the mbuf_initializer value was not being > correctly set. Fix this by calling the appropriate function if vector processing is > enabled. This mirrors the behaviour by the i40e driver. > > Fixes: 319c421f3890 ("net/avf: enable SSE Rx Tx") > Cc: jingjing.wu@intel.com > Cc: stable@dpdk.org > > Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> > --- > drivers/net/iavf/iavf_rxtx.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/drivers/net/iavf/iavf_rxtx.c b/drivers/net/iavf/iavf_rxtx.c index > f7df4665d1..797cdda4b2 100644 > --- a/drivers/net/iavf/iavf_rxtx.c > +++ b/drivers/net/iavf/iavf_rxtx.c > @@ -755,6 +755,13 @@ iavf_dev_rx_queue_setup(struct rte_eth_dev *dev, > uint16_t queue_idx, > if (check_rx_vec_allow(rxq) == false) > ad->rx_vec_allowed = false; > > +#if defined RTE_ARCH_X86 || defined RTE_ARCH_ARM > + /* check vector conflict */ > + if (ad->rx_vec_allowed && iavf_rxq_vec_setup(rxq)) { > + PMD_DRV_LOG(ERR, "Failed vector rx setup."); > + return -EINVAL; > + } > +#endif Bruce: May I know more details about how to reproduce this issue? As the iavf PMD does not support RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP (i40e does) Which indicates before we call rte_eth_rx_queue_setup, the device must be stopped (the flag will be checked in rte_eth_rx_queue_setup) So if we do below steps rte_eth_dev_stop .. rte_eth_rx_queue_setup rte_eth_dev_start the iavf_rxq_vec_setup should be invoked in rte_eth_dev_start -> iavf_set_rx_function anything I missed? Thanks Qi > return 0; > } > > -- > 2.39.2 ^ permalink raw reply [flat|nested] 18+ messages in thread
* RE: [PATCH v2 3/4] net/iavf: fix restart of Rx queue on reconfigure 2023-09-04 1:15 ` Zhang, Qi Z @ 2023-09-04 1:30 ` Zhang, Qi Z 2023-09-04 7:54 ` Bruce Richardson 0 siblings, 1 reply; 18+ messages in thread From: Zhang, Qi Z @ 2023-09-04 1:30 UTC (permalink / raw) To: Richardson, Bruce, dev; +Cc: Richardson, Bruce, Wu, Jingjing, stable > -----Original Message----- > From: Zhang, Qi Z > Sent: Monday, September 4, 2023 9:15 AM > To: Bruce Richardson <bruce.richardson@intel.com>; dev@dpdk.org > Cc: Richardson, Bruce <bruce.richardson@intel.com>; Wu, Jingjing > <jingjing.wu@intel.com>; stable@dpdk.org > Subject: RE: [PATCH v2 3/4] net/iavf: fix restart of Rx queue on reconfigure > > > > > -----Original Message----- > > From: Bruce Richardson <bruce.richardson@intel.com> > > Sent: Thursday, August 31, 2023 8:34 PM > > To: dev@dpdk.org > > Cc: Richardson, Bruce <bruce.richardson@intel.com>; Wu, Jingjing > > <jingjing.wu@intel.com>; stable@dpdk.org > > Subject: [PATCH v2 3/4] net/iavf: fix restart of Rx queue on > > reconfigure > > > > After reconfiguring an RX queue the mbuf_initializer value was not > > being correctly set. Fix this by calling the appropriate function if > > vector processing is enabled. This mirrors the behaviour by the i40e driver. > > > > Fixes: 319c421f3890 ("net/avf: enable SSE Rx Tx") > > Cc: jingjing.wu@intel.com > > Cc: stable@dpdk.org > > > > Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> > > --- > > drivers/net/iavf/iavf_rxtx.c | 7 +++++++ > > 1 file changed, 7 insertions(+) > > > > diff --git a/drivers/net/iavf/iavf_rxtx.c > > b/drivers/net/iavf/iavf_rxtx.c index > > f7df4665d1..797cdda4b2 100644 > > --- a/drivers/net/iavf/iavf_rxtx.c > > +++ b/drivers/net/iavf/iavf_rxtx.c > > @@ -755,6 +755,13 @@ iavf_dev_rx_queue_setup(struct rte_eth_dev *dev, > > uint16_t queue_idx, > > if (check_rx_vec_allow(rxq) == false) > > ad->rx_vec_allowed = false; > > > > +#if defined RTE_ARCH_X86 || defined RTE_ARCH_ARM > > + /* check vector conflict */ > > + if (ad->rx_vec_allowed && iavf_rxq_vec_setup(rxq)) { > > + PMD_DRV_LOG(ERR, "Failed vector rx setup."); > > + return -EINVAL; > > + } > > +#endif > > Bruce: > > May I know more details about how to reproduce this issue? > As the iavf PMD does not support > RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP (i40e does) OK, not sure if the patch 4/4 answered my question 😊 should I squash patch 3, 4 into one? , for my understanding patch 3 doesn't appear to be a bug fix unless we announce RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP. > Which indicates before we call rte_eth_rx_queue_setup, the device > must be stopped (the flag will be checked in rte_eth_rx_queue_setup) > > So if we do below steps > > rte_eth_dev_stop .. > rte_eth_rx_queue_setup > rte_eth_dev_start > > the iavf_rxq_vec_setup should be invoked in rte_eth_dev_start -> > iavf_set_rx_function > > anything I missed? > > Thanks > Qi > > > return 0; > > } > > > > -- > > 2.39.2 ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v2 3/4] net/iavf: fix restart of Rx queue on reconfigure 2023-09-04 1:30 ` Zhang, Qi Z @ 2023-09-04 7:54 ` Bruce Richardson 2023-09-05 0:02 ` Zhang, Qi Z 0 siblings, 1 reply; 18+ messages in thread From: Bruce Richardson @ 2023-09-04 7:54 UTC (permalink / raw) To: Zhang, Qi Z; +Cc: dev, Wu, Jingjing, stable On Mon, Sep 04, 2023 at 02:30:32AM +0100, Zhang, Qi Z wrote: > > > > -----Original Message----- > > From: Zhang, Qi Z > > Sent: Monday, September 4, 2023 9:15 AM > > To: Bruce Richardson <bruce.richardson@intel.com>; dev@dpdk.org > > Cc: Richardson, Bruce <bruce.richardson@intel.com>; Wu, Jingjing > > <jingjing.wu@intel.com>; stable@dpdk.org > > Subject: RE: [PATCH v2 3/4] net/iavf: fix restart of Rx queue on reconfigure > > > > > > > > > -----Original Message----- > > > From: Bruce Richardson <bruce.richardson@intel.com> > > > Sent: Thursday, August 31, 2023 8:34 PM > > > To: dev@dpdk.org > > > Cc: Richardson, Bruce <bruce.richardson@intel.com>; Wu, Jingjing > > > <jingjing.wu@intel.com>; stable@dpdk.org > > > Subject: [PATCH v2 3/4] net/iavf: fix restart of Rx queue on > > > reconfigure > > > > > > After reconfiguring an RX queue the mbuf_initializer value was not > > > being correctly set. Fix this by calling the appropriate function if > > > vector processing is enabled. This mirrors the behaviour by the i40e driver. > > > > > > Fixes: 319c421f3890 ("net/avf: enable SSE Rx Tx") > > > Cc: jingjing.wu@intel.com > > > Cc: stable@dpdk.org > > > > > > Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> > > > --- > > > drivers/net/iavf/iavf_rxtx.c | 7 +++++++ > > > 1 file changed, 7 insertions(+) > > > > > > diff --git a/drivers/net/iavf/iavf_rxtx.c > > > b/drivers/net/iavf/iavf_rxtx.c index > > > f7df4665d1..797cdda4b2 100644 > > > --- a/drivers/net/iavf/iavf_rxtx.c > > > +++ b/drivers/net/iavf/iavf_rxtx.c > > > @@ -755,6 +755,13 @@ iavf_dev_rx_queue_setup(struct rte_eth_dev *dev, > > > uint16_t queue_idx, > > > if (check_rx_vec_allow(rxq) == false) > > > ad->rx_vec_allowed = false; > > > > > > +#if defined RTE_ARCH_X86 || defined RTE_ARCH_ARM > > > + /* check vector conflict */ > > > + if (ad->rx_vec_allowed && iavf_rxq_vec_setup(rxq)) { > > > + PMD_DRV_LOG(ERR, "Failed vector rx setup."); > > > + return -EINVAL; > > > + } > > > +#endif > > > > Bruce: > > > > May I know more details about how to reproduce this issue? > > As the iavf PMD does not support > > RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP (i40e does) > > OK, not sure if the patch 4/4 answered my question 😊 > > should I squash patch 3, 4 into one? , for my understanding patch 3 doesn't appear to be a bug fix unless we announce RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP. > You may have a point. I was experimenting with queue reconfiguration which is where I hit this issue. However, even without queue reconfig support, the device still needs to support queue-stop followed by queue-start, I think, and there may still be an issue there - I'll have to check. /Bruce ^ permalink raw reply [flat|nested] 18+ messages in thread
* RE: [PATCH v2 3/4] net/iavf: fix restart of Rx queue on reconfigure 2023-09-04 7:54 ` Bruce Richardson @ 2023-09-05 0:02 ` Zhang, Qi Z 0 siblings, 0 replies; 18+ messages in thread From: Zhang, Qi Z @ 2023-09-05 0:02 UTC (permalink / raw) To: Richardson, Bruce; +Cc: dev, Wu, Jingjing, stable > -----Original Message----- > From: Richardson, Bruce <bruce.richardson@intel.com> > Sent: Monday, September 4, 2023 3:54 PM > To: Zhang, Qi Z <qi.z.zhang@intel.com> > Cc: dev@dpdk.org; Wu, Jingjing <jingjing.wu@intel.com>; stable@dpdk.org > Subject: Re: [PATCH v2 3/4] net/iavf: fix restart of Rx queue on reconfigure > > On Mon, Sep 04, 2023 at 02:30:32AM +0100, Zhang, Qi Z wrote: > > > > > > > -----Original Message----- > > > From: Zhang, Qi Z > > > Sent: Monday, September 4, 2023 9:15 AM > > > To: Bruce Richardson <bruce.richardson@intel.com>; dev@dpdk.org > > > Cc: Richardson, Bruce <bruce.richardson@intel.com>; Wu, Jingjing > > > <jingjing.wu@intel.com>; stable@dpdk.org > > > Subject: RE: [PATCH v2 3/4] net/iavf: fix restart of Rx queue on > > > reconfigure > > > > > > > > > > > > > -----Original Message----- > > > > From: Bruce Richardson <bruce.richardson@intel.com> > > > > Sent: Thursday, August 31, 2023 8:34 PM > > > > To: dev@dpdk.org > > > > Cc: Richardson, Bruce <bruce.richardson@intel.com>; Wu, Jingjing > > > > <jingjing.wu@intel.com>; stable@dpdk.org > > > > Subject: [PATCH v2 3/4] net/iavf: fix restart of Rx queue on > > > > reconfigure > > > > > > > > After reconfiguring an RX queue the mbuf_initializer value was not > > > > being correctly set. Fix this by calling the appropriate function > > > > if vector processing is enabled. This mirrors the behaviour by the i40e > driver. > > > > > > > > Fixes: 319c421f3890 ("net/avf: enable SSE Rx Tx") > > > > Cc: jingjing.wu@intel.com > > > > Cc: stable@dpdk.org > > > > > > > > Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> > > > > --- > > > > drivers/net/iavf/iavf_rxtx.c | 7 +++++++ > > > > 1 file changed, 7 insertions(+) > > > > > > > > diff --git a/drivers/net/iavf/iavf_rxtx.c > > > > b/drivers/net/iavf/iavf_rxtx.c index > > > > f7df4665d1..797cdda4b2 100644 > > > > --- a/drivers/net/iavf/iavf_rxtx.c > > > > +++ b/drivers/net/iavf/iavf_rxtx.c > > > > @@ -755,6 +755,13 @@ iavf_dev_rx_queue_setup(struct rte_eth_dev > > > > *dev, uint16_t queue_idx, > > > > if (check_rx_vec_allow(rxq) == false) > > > > ad->rx_vec_allowed = false; > > > > > > > > +#if defined RTE_ARCH_X86 || defined RTE_ARCH_ARM > > > > + /* check vector conflict */ > > > > + if (ad->rx_vec_allowed && iavf_rxq_vec_setup(rxq)) { > > > > + PMD_DRV_LOG(ERR, "Failed vector rx setup."); > > > > + return -EINVAL; > > > > + } > > > > +#endif > > > > > > Bruce: > > > > > > May I know more details about how to reproduce this issue? > > > As the iavf PMD does not support > > > RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP (i40e does) > > > > OK, not sure if the patch 4/4 answered my question 😊 > > > > should I squash patch 3, 4 into one? , for my understanding patch 3 doesn't > appear to be a bug fix unless we announce > RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP. > > > You may have a point. I was experimenting with queue reconfiguration which > is where I hit this issue. > However, even without queue reconfig support, the device still needs to > support queue-stop followed by queue-start, I think, and there may still be an > issue there - I'll have to check. Yes, queue start / stop should be supported. Btw, I didn't see mbuf_initializer has been reset during queue stop / start, it might be a different issue. > /Bruce ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH v2 4/4] net/iavf: add support for runtime queue reconfiguration 2023-08-31 12:33 ` [PATCH v2 0/4] Fix i40e/iavf queue reconfig and restarting Bruce Richardson ` (2 preceding siblings ...) 2023-08-31 12:33 ` [PATCH v2 3/4] net/iavf: fix restart of Rx queue on reconfigure Bruce Richardson @ 2023-08-31 12:33 ` Bruce Richardson 2023-09-05 2:25 ` Zhang, Qi Z 3 siblings, 1 reply; 18+ messages in thread From: Bruce Richardson @ 2023-08-31 12:33 UTC (permalink / raw) To: dev; +Cc: Bruce Richardson Unlike the i40e driver, the iavf driver does not advertise support for runtime reconfiguration, meaning that application using the same hardware may get different behaviour when using a PF vs a VF. On testing with a 40G NIC, the only blocker to reconfiguring an RX queue on the fly is the fact that this support is not advertised by the driver. Add support for runtime reconfig by reporting it in the device info flags. Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> --- doc/guides/nics/features/iavf.ini | 2 ++ drivers/net/iavf/iavf_ethdev.c | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/doc/guides/nics/features/iavf.ini b/doc/guides/nics/features/iavf.ini index b72cd98484..db4f92ce71 100644 --- a/doc/guides/nics/features/iavf.ini +++ b/doc/guides/nics/features/iavf.ini @@ -11,6 +11,8 @@ Speed capabilities = Y Link status = Y Rx interrupt = Y Queue start/stop = Y +Runtime Rx queue setup = Y +Runtime Tx queue setup = Y Power mgmt address monitor = Y MTU update = Y Scattered Rx = Y diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c index f2fc5a5621..22fbd7d6b2 100644 --- a/drivers/net/iavf/iavf_ethdev.c +++ b/drivers/net/iavf/iavf_ethdev.c @@ -1127,7 +1127,9 @@ iavf_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) dev_info->reta_size = vf->vf_res->rss_lut_size; dev_info->flow_type_rss_offloads = IAVF_RSS_OFFLOAD_ALL; dev_info->max_mac_addrs = IAVF_NUM_MACADDR_MAX; - dev_info->dev_capa &= ~RTE_ETH_DEV_CAPA_FLOW_RULE_KEEP; + dev_info->dev_capa = + RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP | + RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP; dev_info->rx_offload_capa = RTE_ETH_RX_OFFLOAD_VLAN_STRIP | RTE_ETH_RX_OFFLOAD_QINQ_STRIP | -- 2.39.2 ^ permalink raw reply [flat|nested] 18+ messages in thread
* RE: [PATCH v2 4/4] net/iavf: add support for runtime queue reconfiguration 2023-08-31 12:33 ` [PATCH v2 4/4] net/iavf: add support for runtime queue reconfiguration Bruce Richardson @ 2023-09-05 2:25 ` Zhang, Qi Z 0 siblings, 0 replies; 18+ messages in thread From: Zhang, Qi Z @ 2023-09-05 2:25 UTC (permalink / raw) To: Richardson, Bruce, dev; +Cc: Richardson, Bruce > -----Original Message----- > From: Bruce Richardson <bruce.richardson@intel.com> > Sent: Thursday, August 31, 2023 8:34 PM > To: dev@dpdk.org > Cc: Richardson, Bruce <bruce.richardson@intel.com> > Subject: [PATCH v2 4/4] net/iavf: add support for runtime queue > reconfiguration > > Unlike the i40e driver, the iavf driver does not advertise support for runtime > reconfiguration, meaning that application using the same hardware may get > different behaviour when using a PF vs a VF. On testing with a 40G NIC, the > only blocker to reconfiguring an RX queue on the fly is the fact that this > support is not advertised by the driver. > > Add support for runtime reconfig by reporting it in the device info flags. > > Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> > --- > doc/guides/nics/features/iavf.ini | 2 ++ > drivers/net/iavf/iavf_ethdev.c | 4 +++- > 2 files changed, 5 insertions(+), 1 deletion(-) > > diff --git a/doc/guides/nics/features/iavf.ini > b/doc/guides/nics/features/iavf.ini > index b72cd98484..db4f92ce71 100644 > --- a/doc/guides/nics/features/iavf.ini > +++ b/doc/guides/nics/features/iavf.ini > @@ -11,6 +11,8 @@ Speed capabilities = Y > Link status = Y > Rx interrupt = Y > Queue start/stop = Y > +Runtime Rx queue setup = Y > +Runtime Tx queue setup = Y > Power mgmt address monitor = Y > MTU update = Y > Scattered Rx = Y > diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c > index f2fc5a5621..22fbd7d6b2 100644 > --- a/drivers/net/iavf/iavf_ethdev.c > +++ b/drivers/net/iavf/iavf_ethdev.c > @@ -1127,7 +1127,9 @@ iavf_dev_info_get(struct rte_eth_dev *dev, struct > rte_eth_dev_info *dev_info) > dev_info->reta_size = vf->vf_res->rss_lut_size; > dev_info->flow_type_rss_offloads = IAVF_RSS_OFFLOAD_ALL; > dev_info->max_mac_addrs = IAVF_NUM_MACADDR_MAX; > - dev_info->dev_capa &= ~RTE_ETH_DEV_CAPA_FLOW_RULE_KEEP; > + dev_info->dev_capa = > + RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP | > + RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP; > dev_info->rx_offload_capa = > RTE_ETH_RX_OFFLOAD_VLAN_STRIP | > RTE_ETH_RX_OFFLOAD_QINQ_STRIP | > -- > 2.39.2 Acked-by: Qi Zhang <qi.z.zhang@intel.com> Squashed with Patch 3/4, applied to dpdk-next-net-intel. Thanks Qi ^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2023-09-05 2:25 UTC | newest] Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2023-08-30 15:59 [PATCH 0/4] Fix i40e/iavf queue reconfig and restarting Bruce Richardson 2023-08-30 15:59 ` [PATCH 1/4] net/i40e: fix buffer leak on Rx reconfiguration Bruce Richardson 2023-08-30 15:59 ` [PATCH 2/4] net/iavf: fix buffer leak on Tx queue stop Bruce Richardson 2023-08-30 15:59 ` [PATCH 3/4] net/iavf: fix restart of Rx queue on reconfigure Bruce Richardson 2023-08-30 15:59 ` [PATCH 4/4] net/iavf: add support for runtime queue reconfiguration Bruce Richardson 2023-08-31 12:33 ` [PATCH v2 0/4] Fix i40e/iavf queue reconfig and restarting Bruce Richardson 2023-08-31 12:33 ` [PATCH v2 1/4] net/i40e: fix buffer leak on Rx reconfiguration Bruce Richardson 2023-09-01 7:12 ` Zhang, Qi Z 2023-08-31 12:33 ` [PATCH v2 2/4] net/iavf: fix buffer leak on Tx queue stop Bruce Richardson 2023-09-04 2:17 ` Lu, Wenzhuo 2023-09-04 2:30 ` Zhang, Qi Z 2023-08-31 12:33 ` [PATCH v2 3/4] net/iavf: fix restart of Rx queue on reconfigure Bruce Richardson 2023-09-04 1:15 ` Zhang, Qi Z 2023-09-04 1:30 ` Zhang, Qi Z 2023-09-04 7:54 ` Bruce Richardson 2023-09-05 0:02 ` Zhang, Qi Z 2023-08-31 12:33 ` [PATCH v2 4/4] net/iavf: add support for runtime queue reconfiguration Bruce Richardson 2023-09-05 2:25 ` Zhang, Qi Z
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).