On 2/9/2026 4:45 PM, Bruce Richardson wrote:
The common "simple Tx" function - in some ways a scalar version of the
vector Tx functions - can be used by the idpf driver as well as i40e and
ice, so add support for it to the driver.
Signed-off-by: Bruce Richardson <[email protected]>
---
drivers/net/intel/idpf/idpf_common_device.h | 2 ++
drivers/net/intel/idpf/idpf_common_rxtx.c | 19 +++++++++++++++
drivers/net/intel/idpf/idpf_common_rxtx.h | 3 +++
drivers/net/intel/idpf/idpf_rxtx.c | 26 ++++++++++++++++++++-
4 files changed, 49 insertions(+), 1 deletion(-)
<snip>
diff --git a/drivers/net/intel/idpf/idpf_rxtx.c
b/drivers/net/intel/idpf/idpf_rxtx.c
index 9420200f6d..f2e202d57d 100644
--- a/drivers/net/intel/idpf/idpf_rxtx.c
+++ b/drivers/net/intel/idpf/idpf_rxtx.c
@@ -509,6 +509,22 @@ idpf_tx_queue_setup(struct rte_eth_dev *dev, uint16_t
queue_idx,
txq->q_set = true;
dev->data->tx_queues[queue_idx] = txq;
+ /* Set tx_simple_allowed flag based on queue configuration.
+ * For queue 0: explicitly set the flag based on its configuration.
+ * For other queues: only set to false if this queue cannot use
simple_tx.
+ */
+ if (vport->txq_model == VIRTCHNL2_QUEUE_MODEL_SPLIT)
+ goto out;
+
+ /* for first queue, default to true, disable later if any queue can't
meet conditions */
There are no restrictions in which queue order user may call
rte_eth_tx_queue_setup(). If user called queue_setup() for queue #1 w/o
RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE, and then for queue #0 with
RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE, there could be inconsistencies.
+ if (queue_idx == 0)
+ adapter->tx_simple_allowed = true;
+
+ if ((txq->offloads != (txq->offloads &
RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE)) ||
+ txq->tx_rs_thresh < IDPF_VPMD_TX_MAX_BURST)
+ adapter->tx_simple_allowed = false;
+
+out:
return 0;
err_complq_setup:
<snip>
/* The primary process selects the tx path for all processes. */
--
Regards,
Vladimir