net/dpaa2: change reference to private device
authorShreyansh Jain <shreyansh.jain@nxp.com>
Fri, 11 Jan 2019 12:25:05 +0000 (12:25 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Mon, 14 Jan 2019 16:44:29 +0000 (17:44 +0100)
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 <shreyansh.jain@nxp.com>
drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
drivers/net/dpaa2/dpaa2_ethdev.c
drivers/net/dpaa2/dpaa2_rxtx.c

index 20c606d..626fcbb 100644 (file)
@@ -127,7 +127,10 @@ typedef void (dpaa2_queue_cb_dqrr_t)(struct qbman_swp *swp,
 
 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 */
index 3a20158..2b90f40 100644 (file)
@@ -244,7 +244,7 @@ dpaa2_alloc_rx_tx_queues(struct rte_eth_dev *dev)
        }
 
        for (i = 0; i < priv->nb_rx_queues; i++) {
-               mc_q->dev = dev;
+               mc_q->eth_data = dev->data;
                priv->rx_vq[i] = mc_q++;
                dpaa2_q = (struct dpaa2_queue *)priv->rx_vq[i];
                dpaa2_q->q_storage = rte_malloc("dq_storage",
@@ -260,7 +260,7 @@ dpaa2_alloc_rx_tx_queues(struct rte_eth_dev *dev)
        }
 
        for (i = 0; i < priv->nb_tx_queues; i++) {
-               mc_q->dev = dev;
+               mc_q->eth_data = dev->data;
                mc_q->flow_id = 0xffff;
                priv->tx_vq[i] = mc_q++;
                dpaa2_q = (struct dpaa2_queue *)priv->tx_vq[i];
index 6e2e8ab..2d4b9ef 100644 (file)
@@ -509,7 +509,7 @@ dpaa2_dev_prefetch_rx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
        const struct qbman_fd *fd, *next_fd;
        struct qbman_pull_desc pulldesc;
        struct queue_storage_info_t *q_storage = dpaa2_q->q_storage;
-       struct rte_eth_dev *dev = dpaa2_q->dev;
+       struct rte_eth_dev_data *eth_data = dpaa2_q->eth_data;
 
        if (unlikely(!DPAA2_PER_LCORE_ETHRX_DPIO)) {
                ret = dpaa2_affine_qbman_ethrx_swp();
@@ -613,9 +613,10 @@ dpaa2_dev_prefetch_rx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
                        bufs[num_rx] = eth_sg_fd_to_mbuf(fd);
                else
                        bufs[num_rx] = eth_fd_to_mbuf(fd);
-               bufs[num_rx]->port = dev->data->port_id;
+               bufs[num_rx]->port = eth_data->port_id;
 
-               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]);
 
                dq_storage++;
@@ -716,8 +717,8 @@ dpaa2_dev_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
        struct qbman_swp *swp;
        uint16_t num_tx = 0;
        uint16_t bpid;
-       struct rte_eth_dev *dev = dpaa2_q->dev;
-       struct dpaa2_dev_priv *priv = dev->data->dev_private;
+       struct rte_eth_dev_data *eth_data = dpaa2_q->eth_data;
+       struct dpaa2_dev_priv *priv = eth_data->dev_private;
        uint32_t flags[MAX_TX_RING_SLOTS] = {0};
 
        if (unlikely(!DPAA2_PER_LCORE_DPIO)) {
@@ -729,7 +730,8 @@ dpaa2_dev_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
        }
        swp = DPAA2_PER_LCORE_PORTAL;
 
-       DPAA2_PMD_DP_DEBUG("===> dev =%p, fqid =%d\n", dev, dpaa2_q->fqid);
+       DPAA2_PMD_DP_DEBUG("===> eth_data =%p, fqid =%d\n",
+                       eth_data, dpaa2_q->fqid);
 
        /*Prepare enqueue descriptor*/
        qbman_eq_desc_clear(&eqdesc);
@@ -772,7 +774,7 @@ dpaa2_dev_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
                                    rte_mbuf_refcnt_read((*bufs)) == 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 = rte_vlan_insert(bufs);
                                                if (ret)
@@ -794,7 +796,7 @@ dpaa2_dev_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
                        }
 
                        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 = rte_vlan_insert(bufs);
                                if (ret)