From mboxrd@z Thu Jan 1 00:00:00 1970 From: Shreyansh Jain Subject: [PATCH v2 18/20] net/dpaa2: change reference to private device Date: Fri, 11 Jan 2019 11:58:50 +0000 Message-ID: <20190111115712.6482-19-shreyansh.jain@nxp.com> References: <20181227062233.30781-1-hemant.agrawal@nxp.com> <20190111115712.6482-1-shreyansh.jain@nxp.com> Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Cc: "ferruh.yigit@intel.com" , Shreyansh Jain To: "dev@dpdk.org" Return-path: Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-eopbgr140081.outbound.protection.outlook.com [40.107.14.81]) by dpdk.org (Postfix) with ESMTP id 3F0341BB83 for ; Fri, 11 Jan 2019 12:58:52 +0100 (CET) In-Reply-To: <20190111115712.6482-1-shreyansh.jain@nxp.com> Content-Language: en-US List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" The I/O threads for DPAA2 take their reference for bpool ID, the port ID and other info like qdid, from the rte_eth_dev. Further, to get this data during I/O operation, a reference of the RTE device is kept in the queue structure (dpaa2_queue). In case of secondary processes, rte_eth_dev is not same as the primary process. Thus, the reference goes invalid. This patch changes the implementation to use the dev_private rather than the rte_eth_dev as that is shared area across all the processes. Signed-off-by: Shreyansh Jain --- drivers/bus/fslmc/portal/dpaa2_hw_pvt.h | 5 ++++- drivers/net/dpaa2/dpaa2_ethdev.c | 4 ++-- drivers/net/dpaa2/dpaa2_rxtx.c | 18 ++++++++++-------- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h b/drivers/bus/fslmc/po= rtal/dpaa2_hw_pvt.h index 20c606dbe..626fcbbca 100644 --- a/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h +++ b/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h @@ -127,7 +127,10 @@ typedef void (dpaa2_queue_cb_dqrr_t)(struct qbman_swp = *swp, =20 struct dpaa2_queue { struct rte_mempool *mb_pool; /**< mbuf pool to populate RX ring. */ - void *dev; + union { + struct rte_eth_dev_data *eth_data; + void *dev; + }; int32_t eventfd; /*!< Event Fd of this queue */ uint32_t fqid; /*!< Unique ID of this queue */ uint8_t tc_index; /*!< traffic class identifier */ diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_eth= dev.c index 3a20158da..2b90f4021 100644 --- a/drivers/net/dpaa2/dpaa2_ethdev.c +++ b/drivers/net/dpaa2/dpaa2_ethdev.c @@ -244,7 +244,7 @@ dpaa2_alloc_rx_tx_queues(struct rte_eth_dev *dev) } =20 for (i =3D 0; i < priv->nb_rx_queues; i++) { - mc_q->dev =3D dev; + mc_q->eth_data =3D dev->data; priv->rx_vq[i] =3D mc_q++; dpaa2_q =3D (struct dpaa2_queue *)priv->rx_vq[i]; dpaa2_q->q_storage =3D rte_malloc("dq_storage", @@ -260,7 +260,7 @@ dpaa2_alloc_rx_tx_queues(struct rte_eth_dev *dev) } =20 for (i =3D 0; i < priv->nb_tx_queues; i++) { - mc_q->dev =3D dev; + mc_q->eth_data =3D dev->data; mc_q->flow_id =3D 0xffff; priv->tx_vq[i] =3D mc_q++; dpaa2_q =3D (struct dpaa2_queue *)priv->tx_vq[i]; diff --git a/drivers/net/dpaa2/dpaa2_rxtx.c b/drivers/net/dpaa2/dpaa2_rxtx.= c index 6e2e8abd7..2d4b9ef14 100644 --- a/drivers/net/dpaa2/dpaa2_rxtx.c +++ b/drivers/net/dpaa2/dpaa2_rxtx.c @@ -509,7 +509,7 @@ dpaa2_dev_prefetch_rx(void *queue, struct rte_mbuf **bu= fs, uint16_t nb_pkts) const struct qbman_fd *fd, *next_fd; struct qbman_pull_desc pulldesc; struct queue_storage_info_t *q_storage =3D dpaa2_q->q_storage; - struct rte_eth_dev *dev =3D dpaa2_q->dev; + struct rte_eth_dev_data *eth_data =3D dpaa2_q->eth_data; =20 if (unlikely(!DPAA2_PER_LCORE_ETHRX_DPIO)) { ret =3D dpaa2_affine_qbman_ethrx_swp(); @@ -613,9 +613,10 @@ dpaa2_dev_prefetch_rx(void *queue, struct rte_mbuf **b= ufs, uint16_t nb_pkts) bufs[num_rx] =3D eth_sg_fd_to_mbuf(fd); else bufs[num_rx] =3D eth_fd_to_mbuf(fd); - bufs[num_rx]->port =3D dev->data->port_id; + bufs[num_rx]->port =3D eth_data->port_id; =20 - if (dev->data->dev_conf.rxmode.offloads & DEV_RX_OFFLOAD_VLAN_STRIP) + if (eth_data->dev_conf.rxmode.offloads & + DEV_RX_OFFLOAD_VLAN_STRIP) rte_vlan_strip(bufs[num_rx]); =20 dq_storage++; @@ -716,8 +717,8 @@ dpaa2_dev_tx(void *queue, struct rte_mbuf **bufs, uint1= 6_t nb_pkts) struct qbman_swp *swp; uint16_t num_tx =3D 0; uint16_t bpid; - struct rte_eth_dev *dev =3D dpaa2_q->dev; - struct dpaa2_dev_priv *priv =3D dev->data->dev_private; + struct rte_eth_dev_data *eth_data =3D dpaa2_q->eth_data; + struct dpaa2_dev_priv *priv =3D eth_data->dev_private; uint32_t flags[MAX_TX_RING_SLOTS] =3D {0}; =20 if (unlikely(!DPAA2_PER_LCORE_DPIO)) { @@ -729,7 +730,8 @@ dpaa2_dev_tx(void *queue, struct rte_mbuf **bufs, uint1= 6_t nb_pkts) } swp =3D DPAA2_PER_LCORE_PORTAL; =20 - DPAA2_PMD_DP_DEBUG("=3D=3D=3D> dev =3D%p, fqid =3D%d\n", dev, dpaa2_q->fq= id); + DPAA2_PMD_DP_DEBUG("=3D=3D=3D> eth_data =3D%p, fqid =3D%d\n", + eth_data, dpaa2_q->fqid); =20 /*Prepare enqueue descriptor*/ qbman_eq_desc_clear(&eqdesc); @@ -772,7 +774,7 @@ dpaa2_dev_tx(void *queue, struct rte_mbuf **bufs, uint1= 6_t nb_pkts) rte_mbuf_refcnt_read((*bufs)) =3D=3D 1)) { if (unlikely(((*bufs)->ol_flags & PKT_TX_VLAN_PKT) || - (dev->data->dev_conf.txmode.offloads + (eth_data->dev_conf.txmode.offloads & DEV_TX_OFFLOAD_VLAN_INSERT))) { ret =3D rte_vlan_insert(bufs); if (ret) @@ -794,7 +796,7 @@ dpaa2_dev_tx(void *queue, struct rte_mbuf **bufs, uint1= 6_t nb_pkts) } =20 if (unlikely(((*bufs)->ol_flags & PKT_TX_VLAN_PKT) || - (dev->data->dev_conf.txmode.offloads + (eth_data->dev_conf.txmode.offloads & DEV_TX_OFFLOAD_VLAN_INSERT))) { int ret =3D rte_vlan_insert(bufs); if (ret) --=20 2.17.1