On Tue, Feb 10, 2026 at 09:50:44AM +0000, Ciara Loftus wrote:
> Ensure the txq flags "use_ctx" and "vector_tx" are set/unset properly
> after tx path selection. Prior to this commit these flags were only
> configured if a vector path was chosen. Fix this by making their
> configuration unconditional. Also simplify how the "vector_tx" flag is
> set by removing the dedicated function that sets the flag in favour of
> just setting it inline.
> 
> Fixes: ebcfb039afa8 ("net/iavf: use common Tx path selection infrastructure")
> 
> Signed-off-by: Ciara Loftus <[email protected]>

This patch needs rebase following changes on next-net-intel. Some minor
comments inline below also. You can keep my ack on next version.

Acked-by: Bruce Richardson <[email protected]>


> ---
>  drivers/net/intel/iavf/iavf_rxtx.c          | 15 ++++++---------
>  drivers/net/intel/iavf/iavf_rxtx.h          |  1 -
>  drivers/net/intel/iavf/iavf_rxtx_vec_avx2.c |  7 -------
>  3 files changed, 6 insertions(+), 17 deletions(-)
> 
> diff --git a/drivers/net/intel/iavf/iavf_rxtx.c 
> b/drivers/net/intel/iavf/iavf_rxtx.c
> index 4b763627bc..da8ac488fe 100644
> --- a/drivers/net/intel/iavf/iavf_rxtx.c
> +++ b/drivers/net/intel/iavf/iavf_rxtx.c
> @@ -4263,15 +4263,12 @@ iavf_set_tx_function(struct rte_eth_dev *dev)
>  
>  out:
>  #ifdef RTE_ARCH_X86
> -     if (iavf_tx_path_infos[adapter->tx_func_type].features.simd_width != 0) 
> {
> -             for (i = 0; i < dev->data->nb_tx_queues; i++) {
> -                     txq = dev->data->tx_queues[i];
> -                     if (!txq)
> -                             continue;
> -                     iavf_txq_vec_setup(txq);
> -                     txq->use_ctx =
> -                             
> iavf_tx_path_infos[adapter->tx_func_type].features.ctx_desc;
> -             }
> +     for (i = 0; i < dev->data->nb_tx_queues; i++) {
> +             txq = dev->data->tx_queues[i];
> +             if (!txq)
> +                     continue;
> +             txq->use_ctx = 
> iavf_tx_path_infos[adapter->tx_func_type].features.ctx_desc;
> +             txq->vector_tx = 
> iavf_tx_path_infos[adapter->tx_func_type].features.simd_width != 0;

With the rename of the vector_tx value, this becomes a long line that needs
splitting. Might be worthwhile getting a pointer to the path info, or the
features within it outside the loop to shorten both the assignment lines.

Also, I'm not sure about the comparison to zero for the simd_width. While
not likely, it's possible in future we might specify e.g. 64 as the width
for scalar ops, so would >= SIMD_128 be safer to use?

>       }
>  #endif
>  
> diff --git a/drivers/net/intel/iavf/iavf_rxtx.h 
> b/drivers/net/intel/iavf/iavf_rxtx.h
> index e1f78dcde0..d258c1fc1b 100644
> --- a/drivers/net/intel/iavf/iavf_rxtx.h
> +++ b/drivers/net/intel/iavf/iavf_rxtx.h
> @@ -615,7 +615,6 @@ int iavf_get_monitor_addr(void *rx_queue, struct 
> rte_power_monitor_cond *pmc);
>  int iavf_rx_vec_dev_check(struct rte_eth_dev *dev);
>  int iavf_tx_vec_dev_check(struct rte_eth_dev *dev);
>  int iavf_rxq_vec_setup(struct ci_rx_queue *rxq);
> -int iavf_txq_vec_setup(struct ci_tx_queue *txq);
>  uint16_t iavf_recv_pkts_vec_avx512(void *rx_queue, struct rte_mbuf **rx_pkts,
>                                  uint16_t nb_pkts);
>  uint16_t iavf_recv_pkts_vec_avx512_offload(void *rx_queue,
> diff --git a/drivers/net/intel/iavf/iavf_rxtx_vec_avx2.c 
> b/drivers/net/intel/iavf/iavf_rxtx_vec_avx2.c
> index e29958e0bc..1849af166a 100644
> --- a/drivers/net/intel/iavf/iavf_rxtx_vec_avx2.c
> +++ b/drivers/net/intel/iavf/iavf_rxtx_vec_avx2.c
> @@ -1811,13 +1811,6 @@ iavf_xmit_pkts_vec_avx2_offload(void *tx_queue, struct 
> rte_mbuf **tx_pkts,
>       return iavf_xmit_pkts_vec_avx2_common(tx_queue, tx_pkts, nb_pkts, true);
>  }
>  
> -int __rte_cold
> -iavf_txq_vec_setup(struct ci_tx_queue *txq)
> -{
> -     txq->vector_tx = true;
> -     return 0;
> -}
> -
>  void __rte_cold
>  iavf_rx_queue_release_mbufs_vec(struct ci_rx_queue *rxq)
>  {
> -- 
> 2.43.0
> 

Reply via email to