According to the current data-path implementation in the PMD the CQE
size must follow the cache-line size.
So, the configuration of the CQE size should be depended in
RTE_CACHE_LINE_SIZE.

Wrongly, part of the CQE creations didn't follow it exactly what caused
an incompatibility between HW and SW in the data-path when working in
128B cache-line size systems.

Adjust the rule for any CQE creation.
Remove the cqe_size attribute from the DevX CQ creation command and set
it inside the command translation according to the cache-line size.

Fixes: 79a7e409a2f6 ("common/mlx5: prepare support of packet pacing")
Fixes: 5cd0a83f413e ("common/mlx5: support more fields in DevX CQ create")
Cc: sta...@dpdk.org

Signed-off-by: Michael Baum <michae...@nvidia.com>
Acked-by: Matan Azrad <ma...@nvidia.com>
---
 drivers/common/mlx5/mlx5_devx_cmds.c | 4 ++--
 drivers/common/mlx5/mlx5_devx_cmds.h | 1 -
 drivers/net/mlx5/mlx5_devx.c         | 4 ----
 drivers/net/mlx5/mlx5_txpp.c         | 4 ----
 4 files changed, 2 insertions(+), 11 deletions(-)

diff --git a/drivers/common/mlx5/mlx5_devx_cmds.c 
b/drivers/common/mlx5/mlx5_devx_cmds.c
index 12f51a9..59f0bcc 100644
--- a/drivers/common/mlx5/mlx5_devx_cmds.c
+++ b/drivers/common/mlx5/mlx5_devx_cmds.c
@@ -1569,7 +1569,8 @@ struct mlx5_devx_obj *
        } else {
                MLX5_SET64(cqc, cqctx, dbr_addr, attr->db_addr);
        }
-       MLX5_SET(cqc, cqctx, cqe_sz, attr->cqe_size);
+       MLX5_SET(cqc, cqctx, cqe_sz, (RTE_CACHE_LINE_SIZE == 128) ?
+                                    MLX5_CQE_SIZE_128B : MLX5_CQE_SIZE_64B);
        MLX5_SET(cqc, cqctx, cc, attr->use_first_only);
        MLX5_SET(cqc, cqctx, oi, attr->overrun_ignore);
        MLX5_SET(cqc, cqctx, log_cq_size, attr->log_cq_size);
@@ -1582,7 +1583,6 @@ struct mlx5_devx_obj *
                 attr->mini_cqe_res_format);
        MLX5_SET(cqc, cqctx, mini_cqe_res_format_ext,
                 attr->mini_cqe_res_format_ext);
-       MLX5_SET(cqc, cqctx, cqe_sz, attr->cqe_size);
        if (attr->q_umem_valid) {
                MLX5_SET(create_cq_in, in, cq_umem_valid, attr->q_umem_valid);
                MLX5_SET(create_cq_in, in, cq_umem_id, attr->q_umem_id);
diff --git a/drivers/common/mlx5/mlx5_devx_cmds.h 
b/drivers/common/mlx5/mlx5_devx_cmds.h
index b335b7c..a14f3bf 100644
--- a/drivers/common/mlx5/mlx5_devx_cmds.h
+++ b/drivers/common/mlx5/mlx5_devx_cmds.h
@@ -277,7 +277,6 @@ struct mlx5_devx_cq_attr {
        uint32_t cqe_comp_en:1;
        uint32_t mini_cqe_res_format:2;
        uint32_t mini_cqe_res_format_ext:2;
-       uint32_t cqe_size:3;
        uint32_t log_cq_size:5;
        uint32_t log_page_size:5;
        uint32_t uar_page_id;
diff --git a/drivers/net/mlx5/mlx5_devx.c b/drivers/net/mlx5/mlx5_devx.c
index da3bb78..5c5bea6 100644
--- a/drivers/net/mlx5/mlx5_devx.c
+++ b/drivers/net/mlx5/mlx5_devx.c
@@ -486,8 +486,6 @@
                        "Port %u Rx CQE compression is disabled for LRO.",
                        dev->data->port_id);
        }
-       if (priv->config.cqe_pad)
-               cq_attr.cqe_size = MLX5_CQE_SIZE_128B;
        log_cqe_n = log2above(cqe_n);
        cq_size = sizeof(struct mlx5_cqe) * (1 << log_cqe_n);
        buf = rte_calloc_socket(__func__, 1, cq_size, page_size,
@@ -1262,8 +1260,6 @@
                DRV_LOG(ERR, "Failed to allocate CQ door-bell.");
                goto error;
        }
-       cq_attr.cqe_size = (sizeof(struct mlx5_cqe) == 128) ?
-                           MLX5_CQE_SIZE_128B : MLX5_CQE_SIZE_64B;
        cq_attr.uar_page_id = mlx5_os_get_devx_uar_page_id(priv->sh->tx_uar);
        cq_attr.eqn = priv->sh->eqn;
        cq_attr.q_umem_valid = 1;
diff --git a/drivers/net/mlx5/mlx5_txpp.c b/drivers/net/mlx5/mlx5_txpp.c
index 726bdc6a..e998de3 100644
--- a/drivers/net/mlx5/mlx5_txpp.c
+++ b/drivers/net/mlx5/mlx5_txpp.c
@@ -278,8 +278,6 @@
                goto error;
        }
        /* Create completion queue object for Rearm Queue. */
-       cq_attr.cqe_size = (sizeof(struct mlx5_cqe) == 128) ?
-                           MLX5_CQE_SIZE_128B : MLX5_CQE_SIZE_64B;
        cq_attr.uar_page_id = mlx5_os_get_devx_uar_page_id(sh->tx_uar);
        cq_attr.eqn = sh->eqn;
        cq_attr.q_umem_valid = 1;
@@ -516,8 +514,6 @@
                goto error;
        }
        /* Create completion queue object for Clock Queue. */
-       cq_attr.cqe_size = (sizeof(struct mlx5_cqe) == 128) ?
-                           MLX5_CQE_SIZE_128B : MLX5_CQE_SIZE_64B;
        cq_attr.use_first_only = 1;
        cq_attr.overrun_ignore = 1;
        cq_attr.uar_page_id = mlx5_os_get_devx_uar_page_id(sh->tx_uar);
-- 
1.8.3.1

Reply via email to