[dpdk-dev,v2] net/mlx5: fix secondary process TX error
Checks
Commit Message
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
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>
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.
@@ -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);