]> git.droids-corp.org - dpdk.git/commitdiff
net/mlx5: update Tx queue create for LRO
authorDekel Peled <dekelp@mellanox.com>
Mon, 22 Jul 2019 14:52:05 +0000 (14:52 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Tue, 23 Jul 2019 12:31:36 +0000 (14:31 +0200)
Update function mlx5_txq_ibv_new(), query and store the TIS
transport domain value.
It is required later on Rx side when creating matching TIR.
Add field in mlx5 data structure to store Transport Domain ID.

Signed-off-by: Dekel Peled <dekelp@mellanox.com>
Acked-by: Matan Azrad <matan@mellanox.com>
Acked-by: Viacheslav Ovsiienko <viacheslavo@mellanox.com>
drivers/net/mlx5/mlx5.h
drivers/net/mlx5/mlx5_txq.c

index 5ae99dce85759234ec6fb7df5c87bbb61cf3abc8..84975edb572f5ed9bc7948a1f9087677d9b2f284 100644 (file)
@@ -418,6 +418,7 @@ struct mlx5_ibv_shared {
        uint32_t max_port; /* Maximal IB device port index. */
        struct ibv_context *ctx; /* Verbs/DV context. */
        struct ibv_pd *pd; /* Protection Domain. */
+       uint32_t tdn; /* Transport Domain number. */
        char ibdev_name[IBV_SYSFS_NAME_MAX]; /* IB device name. */
        char ibdev_path[IBV_SYSFS_PATH_MAX]; /* IB device path for secondary */
        struct ibv_device_attr_ex device_attr; /* Device properties. */
index dbad361ac47625954e93e573781d09f71e36d223..fe3b4ec76d74cd28d2bcbeec06f715bbba843251 100644 (file)
@@ -396,6 +396,11 @@ mlx5_txq_ibv_new(struct rte_eth_dev *dev, uint16_t idx)
        const int desc = 1 << txq_data->elts_n;
        int ret = 0;
 
+#ifdef HAVE_IBV_FLOW_DV_SUPPORT
+       /* If using DevX, need additional mask to read tisn value. */
+       if (priv->config.devx && !priv->sh->tdn)
+               qp.comp_mask |= MLX5DV_QP_MASK_RAW_QP_HANDLES;
+#endif
        assert(txq_data);
        priv->verbs_alloc_ctx.type = MLX5_VERBS_ALLOC_TYPE_TX_QUEUE;
        priv->verbs_alloc_ctx.obj = txq_ctrl;
@@ -542,6 +547,27 @@ mlx5_txq_ibv_new(struct rte_eth_dev *dev, uint16_t idx)
        txq_data->wqe_pi = 0;
        txq_data->wqe_comp = 0;
        txq_data->wqe_thres = txq_data->wqe_s / MLX5_TX_COMP_THRESH_INLINE_DIV;
+#ifdef HAVE_IBV_FLOW_DV_SUPPORT
+       /*
+        * If using DevX need to query and store TIS transport domain value.
+        * This is done once per port.
+        * Will use this value on Rx, when creating matching TIR.
+        */
+       if (priv->config.devx && !priv->sh->tdn) {
+               ret = mlx5_devx_cmd_qp_query_tis_td(tmpl.qp, qp.tisn,
+                                                   &priv->sh->tdn);
+               if (ret) {
+                       DRV_LOG(ERR, "Fail to query port %u Tx queue %u QP TIS "
+                               "transport domain", dev->data->port_id, idx);
+                       rte_errno = EINVAL;
+                       goto error;
+               } else {
+                       DRV_LOG(DEBUG, "port %u Tx queue %u TIS number %d "
+                               "transport domain %d", dev->data->port_id,
+                               idx, qp.tisn, priv->sh->tdn);
+               }
+       }
+#endif
        txq_ibv->qp = tmpl.qp;
        txq_ibv->cq = tmpl.cq;
        rte_atomic32_inc(&txq_ibv->refcnt);