From: Ajit Khaparde <[email protected]>

Use buf_addr for mbufs from external pool instead of using iova
addresses. Uses rte_pktmbuf_mtod_offset() to compute the buffer
address for both the first segment and subsequent segments when
the mbuf is marked as RTE_MBUF_F_EXTERNAL.

Fixes: 42b883535804 ("net/bnxt: use new API to get IOVA address")
Cc: [email protected]
Signed-off-by: Ajit Khaparde <[email protected]>
Signed-off-by: Mohammad Shuab Siddique <[email protected]>
---
 drivers/net/bnxt/bnxt_txr.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/net/bnxt/bnxt_txr.c b/drivers/net/bnxt/bnxt_txr.c
index fb5be224d9..51b886c1a6 100644
--- a/drivers/net/bnxt/bnxt_txr.c
+++ b/drivers/net/bnxt/bnxt_txr.c
@@ -325,7 +325,10 @@ static int bnxt_start_xmit(struct rte_mbuf *tx_pkt,
                txbd->flags_type |= TX_BD_LONG_FLAGS_LHINT_GTE2K;
        else
                txbd->flags_type |= lhint_arr[tx_pkt->pkt_len >> 9];
-       txbd->address = rte_cpu_to_le_64(rte_mbuf_data_iova(tx_pkt));
+       if (tx_pkt->ol_flags & RTE_MBUF_F_EXTERNAL)
+               txbd->address = 
rte_cpu_to_le_64(rte_pktmbuf_mtod_offset(tx_pkt, uint64_t, 0));
+       else
+               txbd->address = rte_cpu_to_le_64(rte_mbuf_data_iova(tx_pkt));
        *last_txbd = txbd;
 
        if (long_bd) {
@@ -482,7 +485,11 @@ static int bnxt_start_xmit(struct rte_mbuf *tx_pkt,
                *tx_buf = m_seg;
 
                txbd = &txr->tx_desc_ring[prod];
-               txbd->address = rte_cpu_to_le_64(rte_mbuf_data_iova(m_seg));
+               if (m_seg->ol_flags & RTE_MBUF_F_EXTERNAL)
+                       txbd->address = rte_cpu_to_le_64(
+                               rte_pktmbuf_mtod_offset(m_seg, uint64_t, 0));
+               else
+                       txbd->address = 
rte_cpu_to_le_64(rte_mbuf_data_iova(m_seg));
                txbd->flags_type = TX_BD_SHORT_TYPE_TX_BD_SHORT;
                txbd->len = m_seg->data_len;
 
-- 
2.47.3

Reply via email to