[dpdk-dev,v2] net/mlx5: fix secondary process TX error

Message ID 20171017075117.80527-1-xuemingl@mellanox.com (mailing list archive)
State Accepted, archived
Delegated to: Ferruh Yigit
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Xueming Li Oct. 17, 2017, 7:51 a.m. UTC
  Uninitialized UAR mmap offset caused secondary tx doorbell mapped to
wrong address. This patch restores missing UAR mmap offset init code
overridden by wrong merge.

Fixes: faf2667fe8d5 ("net/mlx5: separate DPDK from verbs Tx queue ...")

Signed-off-by: Xueming Li <xuemingl@mellanox.com>
---
 drivers/net/mlx5/mlx5_txq.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)
  

Comments

Nélio Laranjeiro Oct. 17, 2017, 7:57 a.m. UTC | #1
On Tue, Oct 17, 2017 at 03:51:17PM +0800, Xueming Li wrote:
> Uninitialized UAR mmap offset caused secondary tx doorbell mapped to
> wrong address. This patch restores missing UAR mmap offset init code
> overridden by wrong merge.
> 
> Fixes: faf2667fe8d5 ("net/mlx5: separate DPDK from verbs Tx queue ...")
> 
> Signed-off-by: Xueming Li <xuemingl@mellanox.com>
Acked-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
  
Ferruh Yigit Oct. 23, 2017, 5:28 p.m. UTC | #2
On 10/17/2017 12:57 AM, Nélio Laranjeiro wrote:
> On Tue, Oct 17, 2017 at 03:51:17PM +0800, Xueming Li wrote:
>> Uninitialized UAR mmap offset caused secondary tx doorbell mapped to
>> wrong address. This patch restores missing UAR mmap offset init code
>> overridden by wrong merge.
>>
>> Fixes: faf2667fe8d5 ("net/mlx5: separate DPDK from verbs Tx queue ...")
>>
>> Signed-off-by: Xueming Li <xuemingl@mellanox.com>
> Acked-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>

Applied to dpdk-next-net/master, thanks.
  

Patch

diff --git a/drivers/net/mlx5/mlx5_txq.c b/drivers/net/mlx5/mlx5_txq.c
index 9deaa7ea3..3d5f03370 100644
--- a/drivers/net/mlx5/mlx5_txq.c
+++ b/drivers/net/mlx5/mlx5_txq.c
@@ -303,7 +303,7 @@  mlx5_priv_txq_ibv_new(struct priv *priv, uint16_t idx)
 		struct ibv_cq_ex cq_attr;
 	} attr;
 	unsigned int cqe_n;
-	struct mlx5dv_qp qp;
+	struct mlx5dv_qp qp = { .comp_mask = MLX5DV_QP_MASK_UAR_MMAP_OFFSET };
 	struct mlx5dv_cq cq_info;
 	struct mlx5dv_obj obj;
 	const int desc = 1 << txq_data->elts_n;
@@ -429,6 +429,12 @@  mlx5_priv_txq_ibv_new(struct priv *priv, uint16_t idx)
 	txq_ibv->qp = tmpl.qp;
 	txq_ibv->cq = tmpl.cq;
 	rte_atomic32_inc(&txq_ibv->refcnt);
+	if (qp.comp_mask & MLX5DV_QP_MASK_UAR_MMAP_OFFSET) {
+		txq_ctrl->uar_mmap_offset = qp.uar_mmap_offset;
+	} else {
+		ERROR("Failed to retrieve UAR info, invalid libmlx5.so version");
+		goto error;
+	}
 	DEBUG("%p: Verbs Tx queue %p: refcnt %d", (void *)priv,
 	      (void *)txq_ibv, rte_atomic32_read(&txq_ibv->refcnt));
 	LIST_INSERT_HEAD(&priv->txqsibv, txq_ibv, next);