diff mbox series

net/dpaa2: set port in the mbuf

Message ID 20191004110138.32006-1-nipun.gupta@nxp.com
State Superseded
Headers show
Series net/dpaa2: set port in the mbuf | expand

Commit Message

Nipun Gupta Oct. 4, 2019, 11:01 a.m. UTC
This patch sets the port in mbuf for all the scenarios within
fd to mbuf API

Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com>

Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com> 

---
 drivers/net/dpaa2/dpaa2_rxtx.c | 30 ++++++++++++++++++------------
 1 file changed, 18 insertions(+), 12 deletions(-)

-- 
2.17.1

Comments

Ferruh Yigit Oct. 8, 2019, 9:38 a.m. UTC | #1
On 10/4/2019 12:01 PM, Nipun Gupta wrote:
> This patch sets the port in mbuf for all the scenarios within

> fd to mbuf API


Hi Nipun,

What is the impact of not setting 'port' field for all the scenarios? If it
breaks something, do you want to backport this patch? By converting it to a fix
patch..

> 

> Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com>

> Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Nipun Gupta Oct. 9, 2019, 11:26 a.m. UTC | #2
> -----Original Message-----

> From: Ferruh Yigit <ferruh.yigit@intel.com>

> Sent: Tuesday, October 8, 2019 3:09 PM

> To: Nipun Gupta <nipun.gupta@nxp.com>; dev@dpdk.org

> Cc: Hemant Agrawal <hemant.agrawal@nxp.com>; Sachin Saxena

> <sachin.saxena@nxp.com>

> Subject: Re: [PATCH] net/dpaa2: set port in the mbuf

> 

> On 10/4/2019 12:01 PM, Nipun Gupta wrote:

> > This patch sets the port in mbuf for all the scenarios within

> > fd to mbuf API

> 

> Hi Nipun,

> 

> What is the impact of not setting 'port' field for all the scenarios? If it

> breaks something, do you want to backport this patch? By converting it to a

> fix

> patch..


Hi Ferruh,

You are right. It breaks event scenarios - parallel, atomic and ordered.
There are multiple commits involved. Ill add Fixes and resend.

Thanks

> 

> >

> > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com>

> > Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com>
diff mbox series

Patch

diff --git a/drivers/net/dpaa2/dpaa2_rxtx.c b/drivers/net/dpaa2/dpaa2_rxtx.c
index 7cea109d5..b7b2d8652 100644
--- a/drivers/net/dpaa2/dpaa2_rxtx.c
+++ b/drivers/net/dpaa2/dpaa2_rxtx.c
@@ -260,7 +260,8 @@  dpaa2_dev_rx_parse(struct rte_mbuf *mbuf, void *hw_annot_addr)
 }
 
 static inline struct rte_mbuf *__attribute__((hot))
-eth_sg_fd_to_mbuf(const struct qbman_fd *fd)
+eth_sg_fd_to_mbuf(const struct qbman_fd *fd,
+		  int port_id)
 {
 	struct qbman_sge *sgt, *sge;
 	size_t sg_addr, fd_addr;
@@ -286,6 +287,7 @@  eth_sg_fd_to_mbuf(const struct qbman_fd *fd)
 	first_seg->pkt_len = DPAA2_GET_FD_LEN(fd);
 	first_seg->nb_segs = 1;
 	first_seg->next = NULL;
+	first_seg->port = port_id;
 	if (dpaa2_svr_family == SVR_LX2160A)
 		dpaa2_dev_rx_parse_new(first_seg, fd);
 	else
@@ -319,7 +321,8 @@  eth_sg_fd_to_mbuf(const struct qbman_fd *fd)
 }
 
 static inline struct rte_mbuf *__attribute__((hot))
-eth_fd_to_mbuf(const struct qbman_fd *fd)
+eth_fd_to_mbuf(const struct qbman_fd *fd,
+	       int port_id)
 {
 	struct rte_mbuf *mbuf = DPAA2_INLINE_MBUF_FROM_BUF(
 		DPAA2_IOVA_TO_VADDR(DPAA2_GET_FD_ADDR(fd)),
@@ -333,6 +336,7 @@  eth_fd_to_mbuf(const struct qbman_fd *fd)
 	mbuf->data_off = DPAA2_GET_FD_OFFSET(fd);
 	mbuf->data_len = DPAA2_GET_FD_LEN(fd);
 	mbuf->pkt_len = mbuf->data_len;
+	mbuf->port = port_id;
 	mbuf->next = NULL;
 	rte_mbuf_refcnt_set(mbuf, 1);
 
@@ -621,10 +625,9 @@  dpaa2_dev_prefetch_rx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
 		}
 
 		if (unlikely(DPAA2_FD_GET_FORMAT(fd) == qbman_fd_sg))
-			bufs[num_rx] = eth_sg_fd_to_mbuf(fd);
+			bufs[num_rx] = eth_sg_fd_to_mbuf(fd, eth_data->port_id);
 		else
-			bufs[num_rx] = eth_fd_to_mbuf(fd);
-		bufs[num_rx]->port = eth_data->port_id;
+			bufs[num_rx] = eth_fd_to_mbuf(fd, eth_data->port_id);
 #if defined(RTE_LIBRTE_IEEE1588)
 		priv->rx_timestamp = bufs[num_rx]->timestamp;
 #endif
@@ -679,7 +682,7 @@  dpaa2_dev_process_parallel_event(struct qbman_swp *swp,
 	ev->queue_id = rxq->ev.queue_id;
 	ev->priority = rxq->ev.priority;
 
-	ev->mbuf = eth_fd_to_mbuf(fd);
+	ev->mbuf = eth_fd_to_mbuf(fd, rxq->eth_data->port_id);
 
 	qbman_swp_dqrr_consume(swp, dq);
 }
@@ -704,7 +707,7 @@  dpaa2_dev_process_atomic_event(struct qbman_swp *swp __attribute__((unused)),
 	ev->queue_id = rxq->ev.queue_id;
 	ev->priority = rxq->ev.priority;
 
-	ev->mbuf = eth_fd_to_mbuf(fd);
+	ev->mbuf = eth_fd_to_mbuf(fd, rxq->eth_data->port_id);
 
 	dqrr_index = qbman_get_dqrr_idx(dq);
 	ev->mbuf->seqn = dqrr_index + 1;
@@ -731,7 +734,7 @@  dpaa2_dev_process_ordered_event(struct qbman_swp *swp,
 	ev->queue_id = rxq->ev.queue_id;
 	ev->priority = rxq->ev.priority;
 
-	ev->mbuf = eth_fd_to_mbuf(fd);
+	ev->mbuf = eth_fd_to_mbuf(fd, rxq->eth_data->port_id);
 
 	ev->mbuf->seqn = DPAA2_ENQUEUE_FLAG_ORP;
 	ev->mbuf->seqn |= qbman_result_DQ_odpid(dq) << DPAA2_EQCR_OPRID_SHIFT;
@@ -823,10 +826,11 @@  dpaa2_dev_rx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
 					+ DPAA2_FD_PTA_SIZE + 16));
 
 			if (unlikely(DPAA2_FD_GET_FORMAT(fd) == qbman_fd_sg))
-				bufs[num_rx] = eth_sg_fd_to_mbuf(fd);
+				bufs[num_rx] = eth_sg_fd_to_mbuf(fd,
+							eth_data->port_id);
 			else
-				bufs[num_rx] = eth_fd_to_mbuf(fd);
-			bufs[num_rx]->port = eth_data->port_id;
+				bufs[num_rx] = eth_fd_to_mbuf(fd,
+							eth_data->port_id);
 
 		if (eth_data->dev_conf.rxmode.offloads &
 				DEV_RX_OFFLOAD_VLAN_STRIP) {
@@ -1170,7 +1174,9 @@  dpaa2_dev_free_eqresp_buf(uint16_t eqresp_ci)
 	struct rte_mbuf *m;
 
 	fd = qbman_result_eqresp_fd(&dpio_dev->eqresp[eqresp_ci]);
-	m = eth_fd_to_mbuf(fd);
+
+	/* Setting port id does not matter as we are to free the mbuf */
+	m = eth_fd_to_mbuf(fd, 0);
 	rte_pktmbuf_free(m);
 }