> 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 <[email protected]>

The fix looks good to me.

Acked-by: Ciara Loftus <[email protected]>

> ---
>  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

Reply via email to