[PATCH v4 1/2] net/intel: write mbuf for last Tx desc of segment
Loftus, Ciara
ciara.loftus at intel.com
Wed Jun 3 16:21:58 CEST 2026
> Subject: [PATCH v4 1/2] net/intel: write mbuf for last Tx desc of segment
>
> When a single mbuf segment has more data than can be handled by a single
> Tx data descriptor in the TSO case, adjust how the storing of mbufs is
> being done. Rather than putting the mbuf pointer in the first slot for
> that segment, store it in the last slot instead. This guarantees for us
> that the descriptor for which we have desc-done (DD) writeback always
> has a valid mbuf associated with it.
>
> Signed-off-by: Bruce Richardson <bruce.richardson at intel.com>
The fix looks good to me.
Acked-by: Ciara Loftus <ciara.loftus at intel.com>
> ---
> drivers/net/intel/common/tx_scalar.h | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/intel/common/tx_scalar.h
> b/drivers/net/intel/common/tx_scalar.h
> index 9fcd2e4733..7809bd53e8 100644
> --- a/drivers/net/intel/common/tx_scalar.h
> +++ b/drivers/net/intel/common/tx_scalar.h
> @@ -509,7 +509,6 @@ ci_xmit_pkts(struct ci_tx_queue *txq,
>
> if (txe->mbuf)
> rte_pktmbuf_free_seg(txe->mbuf);
> - txe->mbuf = m_seg;
>
> /* Setup TX Descriptor */
> /* Calculate segment length, using IPsec callback if
> provided */
> @@ -528,6 +527,7 @@ ci_xmit_pkts(struct ci_tx_queue *txq,
> ((uint64_t)CI_MAX_DATA_PER_TXD
> << CI_TXD_QW1_TX_BUF_SZ_S) |
> ((uint64_t)td_tag <<
> CI_TXD_QW1_L2TAG1_S);
> write_txd(txd, buf_dma_addr,
> cmd_type_offset_bsz);
> + txe->mbuf = NULL;
>
> buf_dma_addr += CI_MAX_DATA_PER_TXD;
> slen -= CI_MAX_DATA_PER_TXD;
> @@ -548,6 +548,7 @@ ci_xmit_pkts(struct ci_tx_queue *txq,
> ((uint64_t)slen <<
> CI_TXD_QW1_TX_BUF_SZ_S) |
> ((uint64_t)td_tag <<
> CI_TXD_QW1_L2TAG1_S);
> write_txd(txd, buf_dma_addr, cmd_type_offset_bsz);
> + txe->mbuf = m_seg;
>
> tx_id = txe->next_id;
> txe = txn;
> --
> 2.53.0
More information about the dev
mailing list