common/mlx5: fix completion queue entry size configuration
authorMichael Baum <michaelba@nvidia.com>
Wed, 6 Jan 2021 08:19:23 +0000 (08:19 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Thu, 14 Jan 2021 09:12:36 +0000 (10:12 +0100)
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: stable@dpdk.org
Signed-off-by: Michael Baum <michaelba@nvidia.com>
Acked-by: Matan Azrad <matan@nvidia.com>
drivers/common/mlx5/mlx5_devx_cmds.c
drivers/common/mlx5/mlx5_devx_cmds.h
drivers/net/mlx5/mlx5_devx.c
drivers/net/mlx5/mlx5_txpp.c

index 3bf5279..6a4d6ee 100644 (file)
@@ -1569,7 +1569,8 @@ mlx5_devx_cmd_create_cq(void *ctx, struct mlx5_devx_cq_attr *attr)
        } 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 @@ mlx5_devx_cmd_create_cq(void *ctx, struct mlx5_devx_cq_attr *attr)
                 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);
index 94e9bbb..8d993df 100644 (file)
@@ -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;
index da3bb78..5c5bea6 100644 (file)
@@ -486,8 +486,6 @@ mlx5_rxq_create_devx_cq_resources(struct rte_eth_dev *dev, uint16_t idx)
                        "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 @@ mlx5_txq_create_devx_cq_resources(struct rte_eth_dev *dev, uint16_t idx)
                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;
index 726bdc6..e998de3 100644 (file)
@@ -278,8 +278,6 @@ mlx5_txpp_create_rearm_queue(struct mlx5_dev_ctx_shared *sh)
                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 @@ mlx5_txpp_create_clock_queue(struct mlx5_dev_ctx_shared *sh)
                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);