automatic DPDK test reports
 help / color / mirror / Atom feed
* [dpdk-test-report] |WARNING| pw103994-103997 [PATCH] [V2, 4/4] common/mlx5: fix RQ size configuration in QP create
@ 2021-11-09  0:08 dpdklab
  0 siblings, 0 replies; only message in thread
From: dpdklab @ 2021-11-09  0:08 UTC (permalink / raw)
  To: test-report; +Cc: dpdk-test-reports

[-- Attachment #1: Type: text/plain, Size: 30756 bytes --]

Test-Label: iol-testing
Test-Status: WARNING
http://dpdk.org/patch/103994

_apply patch failure_

Submitter: Raja Zidane <rzidane@nvidia.com>
Date: Monday, November 08 2021 13:09:21 
Applied on: CommitID:f8e0f8ce90303ba75e4301b1fb6ce57d8d255d8f
Apply patch set 103994-103997 failed:

Checking patch drivers/common/mlx5/mlx5_common_devx.c...
error: while searching for:
	size_t alignment = MLX5_CQE_BUF_ALIGNMENT;
	uint32_t umem_size, umem_dbrec;
	uint32_t eqn;
	uint16_t cq_size = 1 << log_desc_n;
	int ret;

	if (page_size == (size_t)-1 || alignment == (size_t)-1) {

error: patch failed: drivers/common/mlx5/mlx5_common_devx.c:86
error: while searching for:
		return -rte_errno;
	}
	/* Allocate memory buffer for CQEs and doorbell record. */
	umem_size = sizeof(struct mlx5_cqe) * cq_size;
	umem_dbrec = RTE_ALIGN(umem_size, MLX5_DBR_SIZE);
	umem_size += MLX5_DBR_SIZE;
	umem_buf = mlx5_malloc(MLX5_MEM_RTE | MLX5_MEM_ZERO, umem_size,

error: patch failed: drivers/common/mlx5/mlx5_common_devx.c:102
error: while searching for:
	cq_obj->cq = cq;
	cq_obj->db_rec = RTE_PTR_ADD(cq_obj->umem_buf, umem_dbrec);
	/* Mark all CQEs initially as invalid. */
	mlx5_cq_init(cq_obj, cq_size);
	return 0;
error:
	ret = rte_errno;

error: patch failed: drivers/common/mlx5/mlx5_common_devx.c:142
error: while searching for:
	void *umem_buf = NULL;
	size_t alignment = MLX5_WQE_BUF_ALIGNMENT;
	uint32_t umem_size, umem_dbrec;
	uint16_t sq_size = 1 << log_wqbb_n;
	int ret;

	if (alignment == (size_t)-1) {

error: patch failed: drivers/common/mlx5/mlx5_common_devx.c:211
error: while searching for:
		return -rte_errno;
	}
	/* Allocate memory buffer for WQEs and doorbell record. */
	umem_size = MLX5_WQE_SIZE * sq_size;
	umem_dbrec = RTE_ALIGN(umem_size, MLX5_DBR_SIZE);
	umem_size += MLX5_DBR_SIZE;
	umem_buf = mlx5_malloc(MLX5_MEM_RTE | MLX5_MEM_ZERO, umem_size,

error: patch failed: drivers/common/mlx5/mlx5_common_devx.c:220
error: while searching for:
 *   0 on success, a negative errno value otherwise and rte_errno is set.
 */
int
mlx5_devx_qp_create(void *ctx, struct mlx5_devx_qp *qp_obj, uint16_t log_wqbb_n,
		    struct mlx5_devx_qp_attr *attr, int socket)
{
	struct mlx5_devx_obj *qp = NULL;

error: patch failed: drivers/common/mlx5/mlx5_common_devx.c:349
error: while searching for:
	void *umem_buf = NULL;
	size_t alignment = MLX5_WQE_BUF_ALIGNMENT;
	uint32_t umem_size, umem_dbrec;
	uint16_t qp_size = 1 << log_wqbb_n;
	int ret;

	if (alignment == (size_t)-1) {

error: patch failed: drivers/common/mlx5/mlx5_common_devx.c:357
error: while searching for:
		return -rte_errno;
	}
	/* Allocate memory buffer for WQEs and doorbell record. */
	umem_size = MLX5_WQE_SIZE * qp_size;
	umem_dbrec = RTE_ALIGN(umem_size, MLX5_DBR_SIZE);
	umem_size += MLX5_DBR_SIZE;
	umem_buf = mlx5_malloc(MLX5_MEM_RTE | MLX5_MEM_ZERO, umem_size,

error: patch failed: drivers/common/mlx5/mlx5_common_devx.c:366
Checking patch drivers/common/mlx5/mlx5_common_devx.h...
error: while searching for:

__rte_internal
int mlx5_devx_qp_create(void *ctx, struct mlx5_devx_qp *qp_obj,
			uint16_t log_wqbb_n,
			struct mlx5_devx_qp_attr *attr, int socket);

__rte_internal

error: patch failed: drivers/common/mlx5/mlx5_common_devx.h:89
Applying patch drivers/common/mlx5/mlx5_common_devx.c with 8 rejects...
Rejected hunk #1.
Rejected hunk #2.
Rejected hunk #3.
Rejected hunk #4.
Rejected hunk #5.
Rejected hunk #6.
Rejected hunk #7.
Rejected hunk #8.
Applying patch drivers/common/mlx5/mlx5_common_devx.h with 1 reject...
Rejected hunk #1.
diff a/drivers/common/mlx5/mlx5_common_devx.c b/drivers/common/mlx5/mlx5_common_devx.c	(rejected hunks)
@@ -86,7 +86,7 @@ mlx5_devx_cq_create(void *ctx, struct mlx5_devx_cq *cq_obj, uint16_t log_desc_n,
 	size_t alignment = MLX5_CQE_BUF_ALIGNMENT;
 	uint32_t umem_size, umem_dbrec;
 	uint32_t eqn;
-	uint16_t cq_size = 1 << log_desc_n;
+	uint32_t num_of_cqes = RTE_BIT32(log_desc_n);
 	int ret;
 
 	if (page_size == (size_t)-1 || alignment == (size_t)-1) {
@@ -102,7 +102,7 @@ mlx5_devx_cq_create(void *ctx, struct mlx5_devx_cq *cq_obj, uint16_t log_desc_n,
 		return -rte_errno;
 	}
 	/* Allocate memory buffer for CQEs and doorbell record. */
-	umem_size = sizeof(struct mlx5_cqe) * cq_size;
+	umem_size = sizeof(struct mlx5_cqe) * num_of_cqes;
 	umem_dbrec = RTE_ALIGN(umem_size, MLX5_DBR_SIZE);
 	umem_size += MLX5_DBR_SIZE;
 	umem_buf = mlx5_malloc(MLX5_MEM_RTE | MLX5_MEM_ZERO, umem_size,
@@ -142,7 +142,7 @@ mlx5_devx_cq_create(void *ctx, struct mlx5_devx_cq *cq_obj, uint16_t log_desc_n,
 	cq_obj->cq = cq;
 	cq_obj->db_rec = RTE_PTR_ADD(cq_obj->umem_buf, umem_dbrec);
 	/* Mark all CQEs initially as invalid. */
-	mlx5_cq_init(cq_obj, cq_size);
+	mlx5_cq_init(cq_obj, num_of_cqes);
 	return 0;
 error:
 	ret = rte_errno;
@@ -211,7 +211,7 @@ mlx5_devx_sq_create(void *ctx, struct mlx5_devx_sq *sq_obj, uint16_t log_wqbb_n,
 	void *umem_buf = NULL;
 	size_t alignment = MLX5_WQE_BUF_ALIGNMENT;
 	uint32_t umem_size, umem_dbrec;
-	uint16_t sq_size = 1 << log_wqbb_n;
+	uint32_t num_of_wqbbs = RTE_BIT32(log_wqbb_n);
 	int ret;
 
 	if (alignment == (size_t)-1) {
@@ -220,7 +220,7 @@ mlx5_devx_sq_create(void *ctx, struct mlx5_devx_sq *sq_obj, uint16_t log_wqbb_n,
 		return -rte_errno;
 	}
 	/* Allocate memory buffer for WQEs and doorbell record. */
-	umem_size = MLX5_WQE_SIZE * sq_size;
+	umem_size = MLX5_WQE_SIZE * num_of_wqbbs;
 	umem_dbrec = RTE_ALIGN(umem_size, MLX5_DBR_SIZE);
 	umem_size += MLX5_DBR_SIZE;
 	umem_buf = mlx5_malloc(MLX5_MEM_RTE | MLX5_MEM_ZERO, umem_size,
@@ -349,7 +349,7 @@ mlx5_devx_qp_destroy(struct mlx5_devx_qp *qp)
  *   0 on success, a negative errno value otherwise and rte_errno is set.
  */
 int
-mlx5_devx_qp_create(void *ctx, struct mlx5_devx_qp *qp_obj, uint16_t log_wqbb_n,
+mlx5_devx_qp_create(void *ctx, struct mlx5_devx_qp *qp_obj, uint32_t log_wqbb_n,
 		    struct mlx5_devx_qp_attr *attr, int socket)
 {
 	struct mlx5_devx_obj *qp = NULL;
@@ -357,7 +357,7 @@ mlx5_devx_qp_create(void *ctx, struct mlx5_devx_qp *qp_obj, uint16_t log_wqbb_n,
 	void *umem_buf = NULL;
 	size_t alignment = MLX5_WQE_BUF_ALIGNMENT;
 	uint32_t umem_size, umem_dbrec;
-	uint16_t qp_size = 1 << log_wqbb_n;
+	uint32_t num_of_wqbbs = RTE_BIT32(log_wqbb_n);
 	int ret;
 
 	if (alignment == (size_t)-1) {
@@ -366,7 +366,7 @@ mlx5_devx_qp_create(void *ctx, struct mlx5_devx_qp *qp_obj, uint16_t log_wqbb_n,
 		return -rte_errno;
 	}
 	/* Allocate memory buffer for WQEs and doorbell record. */
-	umem_size = MLX5_WQE_SIZE * qp_size;
+	umem_size = MLX5_WQE_SIZE * num_of_wqbbs;
 	umem_dbrec = RTE_ALIGN(umem_size, MLX5_DBR_SIZE);
 	umem_size += MLX5_DBR_SIZE;
 	umem_buf = mlx5_malloc(MLX5_MEM_RTE | MLX5_MEM_ZERO, umem_size,
diff a/drivers/common/mlx5/mlx5_common_devx.h b/drivers/common/mlx5/mlx5_common_devx.h	(rejected hunks)
@@ -89,7 +89,7 @@ void mlx5_devx_qp_destroy(struct mlx5_devx_qp *qp);
 
 __rte_internal
 int mlx5_devx_qp_create(void *ctx, struct mlx5_devx_qp *qp_obj,
-			uint16_t log_wqbb_n,
+			uint32_t log_wqbb_n,
 			struct mlx5_devx_qp_attr *attr, int socket);
 
 __rte_internal
Checking patch drivers/crypto/mlx5/mlx5_crypto_dek.c...
error: while searching for:
void
mlx5_crypto_dek_unset(struct mlx5_crypto_priv *priv)
{
	mlx5_hlist_destroy(priv->dek_hlist);
	priv->dek_hlist = NULL;
}

error: patch failed: drivers/crypto/mlx5/mlx5_crypto_dek.c:156
Applying patch drivers/crypto/mlx5/mlx5_crypto_dek.c with 1 reject...
Rejected hunk #1.
diff a/drivers/crypto/mlx5/mlx5_crypto_dek.c b/drivers/crypto/mlx5/mlx5_crypto_dek.c	(rejected hunks)
@@ -156,6 +156,8 @@ mlx5_crypto_dek_setup(struct mlx5_crypto_priv *priv)
 void
 mlx5_crypto_dek_unset(struct mlx5_crypto_priv *priv)
 {
-	mlx5_hlist_destroy(priv->dek_hlist);
-	priv->dek_hlist = NULL;
+	if (priv->dek_hlist) {
+		mlx5_hlist_destroy(priv->dek_hlist);
+		priv->dek_hlist = NULL;
+	}
 }
Checking patch drivers/common/mlx5/mlx5_devx_cmds.c...
error: while searching for:
			MLX5_HCA_CAP_OPMOD_GET_CUR);
	if (!hcattr)
		return rc;
	attr->flow_counter_bulk_alloc_bitmap =
			MLX5_GET(cmd_hca_cap, hcattr, flow_counter_bulk_alloc);
	attr->flow_counters_dump = MLX5_GET(cmd_hca_cap, hcattr,

error: patch failed: drivers/common/mlx5/mlx5_devx_cmds.c:832
error: while searching for:
		if (attr->log_page_size > MLX5_ADAPTER_PAGE_SHIFT)
			MLX5_SET(qpc, qpc, log_page_size,
				 attr->log_page_size - MLX5_ADAPTER_PAGE_SHIFT);
		if (attr->sq_size) {
			MLX5_ASSERT(RTE_IS_POWER_OF_2(attr->sq_size));
			MLX5_SET(qpc, qpc, cqn_snd, attr->cqn);
			MLX5_SET(qpc, qpc, log_sq_size,
				 rte_log2_u32(attr->sq_size));
		} else {
			MLX5_SET(qpc, qpc, no_sq, 1);
		}
		if (attr->rq_size) {
			MLX5_ASSERT(RTE_IS_POWER_OF_2(attr->rq_size));
			MLX5_SET(qpc, qpc, cqn_rcv, attr->cqn);
			MLX5_SET(qpc, qpc, log_rq_stride, attr->log_rq_stride -
				 MLX5_LOG_RQ_STRIDE_SHIFT);
			MLX5_SET(qpc, qpc, log_rq_size,
				 rte_log2_u32(attr->rq_size));
			MLX5_SET(qpc, qpc, rq_type, MLX5_NON_ZERO_RQ);
		} else {
			MLX5_SET(qpc, qpc, rq_type, MLX5_ZERO_LEN_RQ);

error: patch failed: drivers/common/mlx5/mlx5_devx_cmds.c:2153
Checking patch drivers/common/mlx5/mlx5_devx_cmds.h...
error: while searching for:
	uint32_t log_max_mmo_decompress:5;
	uint32_t umr_modify_entity_size_disabled:1;
	uint32_t umr_indirect_mkey_disabled:1;
};

/* LAG Context. */

error: patch failed: drivers/common/mlx5/mlx5_devx_cmds.h:251
error: while searching for:
	uint32_t uar_index:24;
	uint32_t cqn:24;
	uint32_t log_page_size:5;
	uint32_t rq_size:17; /* Must be power of 2. */
	uint32_t log_rq_stride:3;
	uint32_t sq_size:17; /* Must be power of 2. */
	uint32_t ts_format:2;
	uint32_t dbr_umem_valid:1;
	uint32_t dbr_umem_id;

error: patch failed: drivers/common/mlx5/mlx5_devx_cmds.h:477
Checking patch drivers/compress/mlx5/mlx5_compress.c...
error: while searching for:
	qp_attr.cqn = qp->cq.cq->id;
	qp_attr.ts_format =
		mlx5_ts_format_conv(priv->cdev->config.hca_attr.qp_ts_format);
	qp_attr.rq_size = 0;
	qp_attr.sq_size = RTE_BIT32(log_ops_n);
	qp_attr.mmo = priv->mmo_decomp_qp && priv->mmo_comp_qp
			&& priv->mmo_dma_qp;
	ret = mlx5_devx_qp_create(priv->cdev->ctx, &qp->qp, log_ops_n, &qp_attr,

error: patch failed: drivers/compress/mlx5/mlx5_compress.c:244
Checking patch drivers/crypto/mlx5/mlx5_crypto.c...
error: while searching for:
		ucseg->if_cf_toe_cq_res = RTE_BE32(1u << MLX5_UMRC_IF_OFFSET);
		ucseg->mkey_mask = RTE_BE64(1u << 0); /* Mkey length bit. */
		ucseg->ko_to_bs = rte_cpu_to_be_32
			((RTE_ALIGN(priv->max_segs_num, 4u) <<
			 MLX5_UMRC_KO_OFFSET) | (4 << MLX5_UMRC_TO_BS_OFFSET));
		bsf->keytag = priv->keytag;
		/* Init RDMA WRITE WQE. */

error: patch failed: drivers/crypto/mlx5/mlx5_crypto.c:545
error: while searching for:
		.umr_en = 1,
		.crypto_en = 1,
		.set_remote_rw = 1,
		.klm_num = RTE_ALIGN(priv->max_segs_num, 4),
	};

	for (umr = (struct mlx5_umr_wqe *)qp->qp_obj.umem_buf, i = 0;

error: patch failed: drivers/crypto/mlx5/mlx5_crypto.c:569
error: while searching for:
	uint16_t log_nb_desc = rte_log2_u32(qp_conf->nb_descriptors);
	uint32_t ret;
	uint32_t alloc_size = sizeof(*qp);
	struct mlx5_devx_cq_attr cq_attr = {
		.uar_page_id = mlx5_os_get_devx_uar_page_id(priv->uar.obj),
	};

error: patch failed: drivers/crypto/mlx5/mlx5_crypto.c:597
error: while searching for:
		DRV_LOG(ERR, "Failed to create CQ.");
		goto error;
	}
	attr.pd = priv->cdev->pdn;
	attr.uar_index = mlx5_os_get_devx_uar_page_id(priv->uar.obj);
	attr.cqn = qp->cq_obj.cq->id;
	attr.rq_size = 0;
	attr.sq_size = RTE_BIT32(log_nb_desc);
	attr.ts_format =
		mlx5_ts_format_conv(priv->cdev->config.hca_attr.qp_ts_format);
	ret = mlx5_devx_qp_create(priv->cdev->ctx, &qp->qp_obj, log_nb_desc,
				  &attr, socket_id);
	if (ret) {
		DRV_LOG(ERR, "Failed to create QP.");

error: patch failed: drivers/crypto/mlx5/mlx5_crypto.c:619
error: while searching for:
		return -errno;
	}
	if (strcmp(key, "max_segs_num") == 0) {
		if (!tmp || tmp > MLX5_CRYPTO_MAX_SEGS) {
			DRV_LOG(WARNING, "Invalid max_segs_num: %d, should"
				" be less than %d.",
				(uint32_t)tmp, MLX5_CRYPTO_MAX_SEGS);
			rte_errno = EINVAL;
			return -rte_errno;
		}

error: patch failed: drivers/crypto/mlx5/mlx5_crypto.c:747
Hunk #6 succeeded at 886 (offset 76 lines).
error: while searching for:
				RTE_CRYPTODEV_PMD_DEFAULT_MAX_NB_QUEUE_PAIRS,
	};
	const char *ibdev_name = mlx5_os_get_ctx_device_name(cdev->ctx);
	uint16_t rdmw_wqe_size;
	int ret;

	if (rte_eal_process_type() != RTE_PROC_PRIMARY) {

error: patch failed: drivers/crypto/mlx5/mlx5_crypto.c:824
error: while searching for:
	}
	priv->login_obj = login;
	priv->keytag = rte_cpu_to_be_64(devarg_prms.keytag);
	priv->max_segs_num = devarg_prms.max_segs_num;
	priv->umr_wqe_size = sizeof(struct mlx5_wqe_umr_bsf_seg) +
			     sizeof(struct mlx5_wqe_cseg) +
			     sizeof(struct mlx5_wqe_umr_cseg) +
			     sizeof(struct mlx5_wqe_mkey_cseg) +
			     RTE_ALIGN(priv->max_segs_num, 4) *
			     sizeof(struct mlx5_wqe_dseg);
	rdmw_wqe_size = sizeof(struct mlx5_rdma_write_wqe) +
			      sizeof(struct mlx5_wqe_dseg) *
			      (priv->max_segs_num <= 2 ? 2 : 2 +
			       RTE_ALIGN(priv->max_segs_num - 2, 4));
	priv->wqe_set_size = priv->umr_wqe_size + rdmw_wqe_size;
	priv->umr_wqe_stride = priv->umr_wqe_size / MLX5_SEND_WQE_BB;
	priv->max_rdmar_ds = rdmw_wqe_size / sizeof(struct mlx5_wqe_dseg);
	pthread_mutex_lock(&priv_list_lock);
	TAILQ_INSERT_TAIL(&mlx5_crypto_priv_list, priv, next);
	pthread_mutex_unlock(&priv_list_lock);

error: patch failed: drivers/crypto/mlx5/mlx5_crypto.c:873
Checking patch drivers/crypto/mlx5/mlx5_crypto.h...
error: while searching for:

#define MLX5_CRYPTO_DEK_HTABLE_SZ (1 << 11)
#define MLX5_CRYPTO_KEY_LENGTH 80

struct mlx5_crypto_priv {
	TAILQ_ENTRY(mlx5_crypto_priv) next;

error: patch failed: drivers/crypto/mlx5/mlx5_crypto.h:16
Checking patch drivers/regex/mlx5/mlx5_regex_control.c...
error: while searching for:
	qp_obj->qpn = q_ind;
	qp_obj->ci = 0;
	qp_obj->pi = 0;
	attr.rq_size = 0;
	attr.sq_size = RTE_BIT32(MLX5_REGEX_WQE_LOG_NUM(priv->has_umr,
			log_nb_desc));
	attr.mmo = priv->mmo_regex_qp_cap;
	ret = mlx5_devx_qp_create(priv->cdev->ctx, &qp_obj->qp_obj,

error: patch failed: drivers/regex/mlx5/mlx5_regex_control.c:149
Checking patch drivers/vdpa/mlx5/mlx5_vdpa_event.c...
error: while searching for:
	}
	attr.uar_index = mlx5_os_get_devx_uar_page_id(priv->uar.obj);
	attr.cqn = eqp->cq.cq_obj.cq->id;
	attr.rq_size = RTE_BIT32(log_desc_n);
	attr.log_rq_stride = rte_log2_u32(MLX5_WSEG_SIZE);
	attr.sq_size = 0; /* No need SQ. */
	attr.ts_format =
		mlx5_ts_format_conv(priv->cdev->config.hca_attr.qp_ts_format);
	ret = mlx5_devx_qp_create(priv->cdev->ctx, &(eqp->sw_qp), log_desc_n,

error: patch failed: drivers/vdpa/mlx5/mlx5_vdpa_event.c:589
Applying patch drivers/common/mlx5/mlx5_devx_cmds.c with 2 rejects...
Rejected hunk #1.
Rejected hunk #2.
Applying patch drivers/common/mlx5/mlx5_devx_cmds.h with 2 rejects...
Rejected hunk #1.
Rejected hunk #2.
Applying patch drivers/compress/mlx5/mlx5_compress.c with 1 reject...
Rejected hunk #1.
Applying patch drivers/crypto/mlx5/mlx5_crypto.c with 7 rejects...
Rejected hunk #1.
Rejected hunk #2.
Rejected hunk #3.
Rejected hunk #4.
Rejected hunk #5.
Hunk #6 applied cleanly.
Rejected hunk #7.
Rejected hunk #8.
Applying patch drivers/crypto/mlx5/mlx5_crypto.h with 1 reject...
Rejected hunk #1.
Applying patch drivers/regex/mlx5/mlx5_regex_control.c with 1 reject...
Rejected hunk #1.
Applying patch drivers/vdpa/mlx5/mlx5_vdpa_event.c with 1 reject...
Rejected hunk #1.
diff a/drivers/common/mlx5/mlx5_devx_cmds.c b/drivers/common/mlx5/mlx5_devx_cmds.c	(rejected hunks)
@@ -832,6 +832,7 @@ mlx5_devx_cmd_query_hca_attr(void *ctx,
 			MLX5_HCA_CAP_OPMOD_GET_CUR);
 	if (!hcattr)
 		return rc;
+	attr->max_wqe_sz_sq = MLX5_GET(cmd_hca_cap, hcattr, max_wqe_sz_sq);
 	attr->flow_counter_bulk_alloc_bitmap =
 			MLX5_GET(cmd_hca_cap, hcattr, flow_counter_bulk_alloc);
 	attr->flow_counters_dump = MLX5_GET(cmd_hca_cap, hcattr,
@@ -2153,21 +2154,22 @@ mlx5_devx_cmd_create_qp(void *ctx,
 		if (attr->log_page_size > MLX5_ADAPTER_PAGE_SHIFT)
 			MLX5_SET(qpc, qpc, log_page_size,
 				 attr->log_page_size - MLX5_ADAPTER_PAGE_SHIFT);
-		if (attr->sq_size) {
-			MLX5_ASSERT(RTE_IS_POWER_OF_2(attr->sq_size));
+		if (attr->num_of_send_wqbbs) {
+			MLX5_ASSERT(RTE_IS_POWER_OF_2(attr->num_of_send_wqbbs));
 			MLX5_SET(qpc, qpc, cqn_snd, attr->cqn);
 			MLX5_SET(qpc, qpc, log_sq_size,
-				 rte_log2_u32(attr->sq_size));
+				 rte_log2_u32(attr->num_of_send_wqbbs));
 		} else {
 			MLX5_SET(qpc, qpc, no_sq, 1);
 		}
-		if (attr->rq_size) {
-			MLX5_ASSERT(RTE_IS_POWER_OF_2(attr->rq_size));
+		if (attr->num_of_receive_wqes) {
+			MLX5_ASSERT(RTE_IS_POWER_OF_2(
+					attr->num_of_receive_wqes));
 			MLX5_SET(qpc, qpc, cqn_rcv, attr->cqn);
 			MLX5_SET(qpc, qpc, log_rq_stride, attr->log_rq_stride -
 				 MLX5_LOG_RQ_STRIDE_SHIFT);
 			MLX5_SET(qpc, qpc, log_rq_size,
-				 rte_log2_u32(attr->rq_size));
+				 rte_log2_u32(attr->num_of_receive_wqes));
 			MLX5_SET(qpc, qpc, rq_type, MLX5_NON_ZERO_RQ);
 		} else {
 			MLX5_SET(qpc, qpc, rq_type, MLX5_ZERO_LEN_RQ);
diff a/drivers/common/mlx5/mlx5_devx_cmds.h b/drivers/common/mlx5/mlx5_devx_cmds.h	(rejected hunks)
@@ -251,6 +251,7 @@ struct mlx5_hca_attr {
 	uint32_t log_max_mmo_decompress:5;
 	uint32_t umr_modify_entity_size_disabled:1;
 	uint32_t umr_indirect_mkey_disabled:1;
+	uint16_t max_wqe_sz_sq;
 };
 
 /* LAG Context. */
@@ -477,9 +478,9 @@ struct mlx5_devx_qp_attr {
 	uint32_t uar_index:24;
 	uint32_t cqn:24;
 	uint32_t log_page_size:5;
-	uint32_t rq_size:17; /* Must be power of 2. */
+	uint32_t num_of_receive_wqes:17; /* Must be power of 2. */
 	uint32_t log_rq_stride:3;
-	uint32_t sq_size:17; /* Must be power of 2. */
+	uint32_t num_of_send_wqbbs:17; /* Must be power of 2. */
 	uint32_t ts_format:2;
 	uint32_t dbr_umem_valid:1;
 	uint32_t dbr_umem_id;
diff a/drivers/compress/mlx5/mlx5_compress.c b/drivers/compress/mlx5/mlx5_compress.c	(rejected hunks)
@@ -244,8 +244,8 @@ mlx5_compress_qp_setup(struct rte_compressdev *dev, uint16_t qp_id,
 	qp_attr.cqn = qp->cq.cq->id;
 	qp_attr.ts_format =
 		mlx5_ts_format_conv(priv->cdev->config.hca_attr.qp_ts_format);
-	qp_attr.rq_size = 0;
-	qp_attr.sq_size = RTE_BIT32(log_ops_n);
+	qp_attr.num_of_receive_wqes = 0;
+	qp_attr.num_of_send_wqbbs = RTE_BIT32(log_ops_n);
 	qp_attr.mmo = priv->mmo_decomp_qp && priv->mmo_comp_qp
 			&& priv->mmo_dma_qp;
 	ret = mlx5_devx_qp_create(priv->cdev->ctx, &qp->qp, log_ops_n, &qp_attr,
diff a/drivers/crypto/mlx5/mlx5_crypto.c b/drivers/crypto/mlx5/mlx5_crypto.c	(rejected hunks)
@@ -545,7 +545,7 @@ mlx5_crypto_qp_init(struct mlx5_crypto_priv *priv, struct mlx5_crypto_qp *qp)
 		ucseg->if_cf_toe_cq_res = RTE_BE32(1u << MLX5_UMRC_IF_OFFSET);
 		ucseg->mkey_mask = RTE_BE64(1u << 0); /* Mkey length bit. */
 		ucseg->ko_to_bs = rte_cpu_to_be_32
-			((RTE_ALIGN(priv->max_segs_num, 4u) <<
+			((MLX5_CRYPTO_KLM_SEGS_NUM(priv->umr_wqe_size) <<
 			 MLX5_UMRC_KO_OFFSET) | (4 << MLX5_UMRC_TO_BS_OFFSET));
 		bsf->keytag = priv->keytag;
 		/* Init RDMA WRITE WQE. */
@@ -569,7 +569,7 @@ mlx5_crypto_indirect_mkeys_prepare(struct mlx5_crypto_priv *priv,
 		.umr_en = 1,
 		.crypto_en = 1,
 		.set_remote_rw = 1,
-		.klm_num = RTE_ALIGN(priv->max_segs_num, 4),
+		.klm_num = MLX5_CRYPTO_KLM_SEGS_NUM(priv->umr_wqe_size),
 	};
 
 	for (umr = (struct mlx5_umr_wqe *)qp->qp_obj.umem_buf, i = 0;
@@ -597,6 +597,7 @@ mlx5_crypto_queue_pair_setup(struct rte_cryptodev *dev, uint16_t qp_id,
 	uint16_t log_nb_desc = rte_log2_u32(qp_conf->nb_descriptors);
 	uint32_t ret;
 	uint32_t alloc_size = sizeof(*qp);
+	uint32_t log_wqbb_n;
 	struct mlx5_devx_cq_attr cq_attr = {
 		.uar_page_id = mlx5_os_get_devx_uar_page_id(priv->uar.obj),
 	};
@@ -619,14 +620,16 @@ mlx5_crypto_queue_pair_setup(struct rte_cryptodev *dev, uint16_t qp_id,
 		DRV_LOG(ERR, "Failed to create CQ.");
 		goto error;
 	}
+	log_wqbb_n = rte_log2_u32(RTE_BIT32(log_nb_desc) *
+				(priv->wqe_set_size / MLX5_SEND_WQE_BB));
 	attr.pd = priv->cdev->pdn;
 	attr.uar_index = mlx5_os_get_devx_uar_page_id(priv->uar.obj);
 	attr.cqn = qp->cq_obj.cq->id;
-	attr.rq_size = 0;
-	attr.sq_size = RTE_BIT32(log_nb_desc);
+	attr.num_of_receive_wqes = 0;
+	attr.num_of_send_wqbbs = RTE_BIT32(log_wqbb_n);
 	attr.ts_format =
 		mlx5_ts_format_conv(priv->cdev->config.hca_attr.qp_ts_format);
-	ret = mlx5_devx_qp_create(priv->cdev->ctx, &qp->qp_obj, log_nb_desc,
+	ret = mlx5_devx_qp_create(priv->cdev->ctx, &qp->qp_obj, log_wqbb_n,
 				  &attr, socket_id);
 	if (ret) {
 		DRV_LOG(ERR, "Failed to create QP.");
@@ -747,10 +750,8 @@ mlx5_crypto_args_check_handler(const char *key, const char *val, void *opaque)
 		return -errno;
 	}
 	if (strcmp(key, "max_segs_num") == 0) {
-		if (!tmp || tmp > MLX5_CRYPTO_MAX_SEGS) {
-			DRV_LOG(WARNING, "Invalid max_segs_num: %d, should"
-				" be less than %d.",
-				(uint32_t)tmp, MLX5_CRYPTO_MAX_SEGS);
+		if (!tmp) {
+			DRV_LOG(ERR, "max_segs_num must be greater than 0.");
 			rte_errno = EINVAL;
 			return -rte_errno;
 		}
@@ -824,7 +900,6 @@ mlx5_crypto_dev_probe(struct mlx5_common_device *cdev)
 				RTE_CRYPTODEV_PMD_DEFAULT_MAX_NB_QUEUE_PAIRS,
 	};
 	const char *ibdev_name = mlx5_os_get_ctx_device_name(cdev->ctx);
-	uint16_t rdmw_wqe_size;
 	int ret;
 
 	if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
@@ -873,20 +948,17 @@ mlx5_crypto_dev_probe(struct mlx5_common_device *cdev)
 	}
 	priv->login_obj = login;
 	priv->keytag = rte_cpu_to_be_64(devarg_prms.keytag);
-	priv->max_segs_num = devarg_prms.max_segs_num;
-	priv->umr_wqe_size = sizeof(struct mlx5_wqe_umr_bsf_seg) +
-			     sizeof(struct mlx5_wqe_cseg) +
-			     sizeof(struct mlx5_wqe_umr_cseg) +
-			     sizeof(struct mlx5_wqe_mkey_cseg) +
-			     RTE_ALIGN(priv->max_segs_num, 4) *
-			     sizeof(struct mlx5_wqe_dseg);
-	rdmw_wqe_size = sizeof(struct mlx5_rdma_write_wqe) +
-			      sizeof(struct mlx5_wqe_dseg) *
-			      (priv->max_segs_num <= 2 ? 2 : 2 +
-			       RTE_ALIGN(priv->max_segs_num - 2, 4));
-	priv->wqe_set_size = priv->umr_wqe_size + rdmw_wqe_size;
-	priv->umr_wqe_stride = priv->umr_wqe_size / MLX5_SEND_WQE_BB;
-	priv->max_rdmar_ds = rdmw_wqe_size / sizeof(struct mlx5_wqe_dseg);
+	ret = mlx5_crypto_configure_wqe_size(priv,
+		cdev->config.hca_attr.max_wqe_sz_sq, devarg_prms.max_segs_num);
+	if (ret) {
+		mlx5_devx_uar_release(&priv->uar);
+		rte_cryptodev_pmd_destroy(priv->crypto_dev);
+		return -1;
+	}
+	DRV_LOG(INFO, "Max number of segments: %u.",
+		(unsigned int)RTE_MIN(
+			MLX5_CRYPTO_KLM_SEGS_NUM(priv->umr_wqe_size),
+			(uint16_t)(priv->max_rdmar_ds - 2)));
 	pthread_mutex_lock(&priv_list_lock);
 	TAILQ_INSERT_TAIL(&mlx5_crypto_priv_list, priv, next);
 	pthread_mutex_unlock(&priv_list_lock);
diff a/drivers/crypto/mlx5/mlx5_crypto.h b/drivers/crypto/mlx5/mlx5_crypto.h	(rejected hunks)
@@ -16,6 +16,13 @@
 
 #define MLX5_CRYPTO_DEK_HTABLE_SZ (1 << 11)
 #define MLX5_CRYPTO_KEY_LENGTH 80
+#define MLX5_CRYPTO_UMR_WQE_STATIC_SIZE (sizeof(struct mlx5_wqe_cseg) +\
+					sizeof(struct mlx5_wqe_umr_cseg) +\
+					sizeof(struct mlx5_wqe_mkey_cseg) +\
+					sizeof(struct mlx5_wqe_umr_bsf_seg))
+#define MLX5_CRYPTO_KLM_SEGS_NUM(umr_wqe_sz) ((umr_wqe_sz -\
+					MLX5_CRYPTO_UMR_WQE_STATIC_SIZE) /\
+					MLX5_WSEG_SIZE)
 
 struct mlx5_crypto_priv {
 	TAILQ_ENTRY(mlx5_crypto_priv) next;
diff a/drivers/regex/mlx5/mlx5_regex_control.c b/drivers/regex/mlx5/mlx5_regex_control.c	(rejected hunks)
@@ -149,8 +149,8 @@ regex_ctrl_create_hw_qp(struct mlx5_regex_priv *priv, struct mlx5_regex_qp *qp,
 	qp_obj->qpn = q_ind;
 	qp_obj->ci = 0;
 	qp_obj->pi = 0;
-	attr.rq_size = 0;
-	attr.sq_size = RTE_BIT32(MLX5_REGEX_WQE_LOG_NUM(priv->has_umr,
+	attr.num_of_receive_wqes = 0;
+	attr.num_of_send_wqbbs = RTE_BIT32(MLX5_REGEX_WQE_LOG_NUM(priv->has_umr,
 			log_nb_desc));
 	attr.mmo = priv->mmo_regex_qp_cap;
 	ret = mlx5_devx_qp_create(priv->cdev->ctx, &qp_obj->qp_obj,
diff a/drivers/vdpa/mlx5/mlx5_vdpa_event.c b/drivers/vdpa/mlx5/mlx5_vdpa_event.c	(rejected hunks)
@@ -589,9 +589,9 @@ mlx5_vdpa_event_qp_create(struct mlx5_vdpa_priv *priv, uint16_t desc_n,
 	}
 	attr.uar_index = mlx5_os_get_devx_uar_page_id(priv->uar.obj);
 	attr.cqn = eqp->cq.cq_obj.cq->id;
-	attr.rq_size = RTE_BIT32(log_desc_n);
+	attr.num_of_receive_wqes = RTE_BIT32(log_desc_n);
 	attr.log_rq_stride = rte_log2_u32(MLX5_WSEG_SIZE);
-	attr.sq_size = 0; /* No need SQ. */
+	attr.num_of_send_wqbbs = 0; /* No need SQ. */
 	attr.ts_format =
 		mlx5_ts_format_conv(priv->cdev->config.hca_attr.qp_ts_format);
 	ret = mlx5_devx_qp_create(priv->cdev->ctx, &(eqp->sw_qp), log_desc_n,
Checking patch drivers/common/mlx5/mlx5_common_devx.c...
error: while searching for:
 *   Context returned from mlx5 open_device() glue function.
 * @param[in/out] qp_obj
 *   Pointer to QP to create.
 * @param[in] log_wqbb_n
 *   Log of number of WQBBs in queue.
 * @param[in] attr
 *   Pointer to QP attributes structure.
 * @param[in] socket

error: patch failed: drivers/common/mlx5/mlx5_common_devx.c:338
error: while searching for:
 *   0 on success, a negative errno value otherwise and rte_errno is set.
 */
int
mlx5_devx_qp_create(void *ctx, struct mlx5_devx_qp *qp_obj, uint32_t log_wqbb_n,
		    struct mlx5_devx_qp_attr *attr, int socket)
{
	struct mlx5_devx_obj *qp = NULL;

error: patch failed: drivers/common/mlx5/mlx5_common_devx.c:349
Hunk #3 succeeded at 211 (offset -146 lines).
Hunk #4 succeeded at 219 (offset -146 lines).
Checking patch drivers/common/mlx5/mlx5_common_devx.h...
error: while searching for:

__rte_internal
int mlx5_devx_qp_create(void *ctx, struct mlx5_devx_qp *qp_obj,
			uint32_t log_wqbb_n,
			struct mlx5_devx_qp_attr *attr, int socket);

__rte_internal

error: patch failed: drivers/common/mlx5/mlx5_common_devx.h:89
Checking patch drivers/compress/mlx5/mlx5_compress.c...
error: while searching for:
	qp_attr.num_of_send_wqbbs = RTE_BIT32(log_ops_n);
	qp_attr.mmo = priv->mmo_decomp_qp && priv->mmo_comp_qp
			&& priv->mmo_dma_qp;
	ret = mlx5_devx_qp_create(priv->cdev->ctx, &qp->qp, log_ops_n, &qp_attr,
				  socket_id);
	if (ret != 0) {
		DRV_LOG(ERR, "Failed to create QP.");
		goto err;

error: patch failed: drivers/compress/mlx5/mlx5_compress.c:248
Checking patch drivers/crypto/mlx5/mlx5_crypto.c...
error: drivers/crypto/mlx5/mlx5_crypto.c: does not match index
Checking patch drivers/regex/mlx5/mlx5_regex_control.c...
error: while searching for:
			log_nb_desc));
	attr.mmo = priv->mmo_regex_qp_cap;
	ret = mlx5_devx_qp_create(priv->cdev->ctx, &qp_obj->qp_obj,
			MLX5_REGEX_WQE_LOG_NUM(priv->has_umr, log_nb_desc),
			&attr, SOCKET_ID_ANY);
	if (ret) {
		DRV_LOG(ERR, "Can't create QP object.");
		rte_errno = ENOMEM;

error: patch failed: drivers/regex/mlx5/mlx5_regex_control.c:154
Checking patch drivers/vdpa/mlx5/mlx5_vdpa_event.c...
error: while searching for:
	attr.num_of_send_wqbbs = 0; /* No need SQ. */
	attr.ts_format =
		mlx5_ts_format_conv(priv->cdev->config.hca_attr.qp_ts_format);
	ret = mlx5_devx_qp_create(priv->cdev->ctx, &(eqp->sw_qp), log_desc_n,
				  &attr, SOCKET_ID_ANY);
	if (ret) {
		DRV_LOG(ERR, "Failed to create SW QP(%u).", rte_errno);
		goto error;

error: patch failed: drivers/vdpa/mlx5/mlx5_vdpa_event.c:594
Applying patch drivers/common/mlx5/mlx5_common_devx.c with 2 rejects...
Rejected hunk #1.
Rejected hunk #2.
Hunk #3 applied cleanly.
Hunk #4 applied cleanly.
Applying patch drivers/common/mlx5/mlx5_common_devx.h with 1 reject...
Rejected hunk #1.
Applying patch drivers/compress/mlx5/mlx5_compress.c with 1 reject...
Rejected hunk #1.
Applying patch drivers/regex/mlx5/mlx5_regex_control.c with 1 reject...
Rejected hunk #1.
Applying patch drivers/vdpa/mlx5/mlx5_vdpa_event.c with 1 reject...
Rejected hunk #1.
diff a/drivers/common/mlx5/mlx5_common_devx.c b/drivers/common/mlx5/mlx5_common_devx.c	(rejected hunks)
@@ -338,8 +338,8 @@ mlx5_devx_qp_destroy(struct mlx5_devx_qp *qp)
  *   Context returned from mlx5 open_device() glue function.
  * @param[in/out] qp_obj
  *   Pointer to QP to create.
- * @param[in] log_wqbb_n
- *   Log of number of WQBBs in queue.
+ * @param[in] queue_size
+ *   Size of queue to create.
  * @param[in] attr
  *   Pointer to QP attributes structure.
  * @param[in] socket
@@ -349,7 +349,7 @@ mlx5_devx_qp_destroy(struct mlx5_devx_qp *qp)
  *   0 on success, a negative errno value otherwise and rte_errno is set.
  */
 int
-mlx5_devx_qp_create(void *ctx, struct mlx5_devx_qp *qp_obj, uint32_t log_wqbb_n,
+mlx5_devx_qp_create(void *ctx, struct mlx5_devx_qp *qp_obj, uint32_t queue_size,
 		    struct mlx5_devx_qp_attr *attr, int socket)
 {
 	struct mlx5_devx_obj *qp = NULL;
diff a/drivers/common/mlx5/mlx5_common_devx.h b/drivers/common/mlx5/mlx5_common_devx.h	(rejected hunks)
@@ -89,7 +89,7 @@ void mlx5_devx_qp_destroy(struct mlx5_devx_qp *qp);
 
 __rte_internal
 int mlx5_devx_qp_create(void *ctx, struct mlx5_devx_qp *qp_obj,
-			uint32_t log_wqbb_n,
+			uint32_t queue_size,
 			struct mlx5_devx_qp_attr *attr, int socket);
 
 __rte_internal
diff a/drivers/compress/mlx5/mlx5_compress.c b/drivers/compress/mlx5/mlx5_compress.c	(rejected hunks)
@@ -248,8 +248,9 @@ mlx5_compress_qp_setup(struct rte_compressdev *dev, uint16_t qp_id,
 	qp_attr.num_of_send_wqbbs = RTE_BIT32(log_ops_n);
 	qp_attr.mmo = priv->mmo_decomp_qp && priv->mmo_comp_qp
 			&& priv->mmo_dma_qp;
-	ret = mlx5_devx_qp_create(priv->cdev->ctx, &qp->qp, log_ops_n, &qp_attr,
-				  socket_id);
+	ret = mlx5_devx_qp_create(priv->cdev->ctx, &qp->qp,
+					qp_attr.num_of_send_wqbbs *
+					MLX5_WQE_SIZE, &qp_attr, socket_id);
 	if (ret != 0) {
 		DRV_LOG(ERR, "Failed to create QP.");
 		goto err;
diff a/drivers/regex/mlx5/mlx5_regex_control.c b/drivers/regex/mlx5/mlx5_regex_control.c	(rejected hunks)
@@ -154,8 +154,8 @@ regex_ctrl_create_hw_qp(struct mlx5_regex_priv *priv, struct mlx5_regex_qp *qp,
 			log_nb_desc));
 	attr.mmo = priv->mmo_regex_qp_cap;
 	ret = mlx5_devx_qp_create(priv->cdev->ctx, &qp_obj->qp_obj,
-			MLX5_REGEX_WQE_LOG_NUM(priv->has_umr, log_nb_desc),
-			&attr, SOCKET_ID_ANY);
+			attr.num_of_send_wqbbs * MLX5_WQE_SIZE, &attr,
+			SOCKET_ID_ANY);
 	if (ret) {
 		DRV_LOG(ERR, "Can't create QP object.");
 		rte_errno = ENOMEM;
diff a/drivers/vdpa/mlx5/mlx5_vdpa_event.c b/drivers/vdpa/mlx5/mlx5_vdpa_event.c	(rejected hunks)
@@ -594,8 +594,9 @@ mlx5_vdpa_event_qp_create(struct mlx5_vdpa_priv *priv, uint16_t desc_n,
 	attr.num_of_send_wqbbs = 0; /* No need SQ. */
 	attr.ts_format =
 		mlx5_ts_format_conv(priv->cdev->config.hca_attr.qp_ts_format);
-	ret = mlx5_devx_qp_create(priv->cdev->ctx, &(eqp->sw_qp), log_desc_n,
-				  &attr, SOCKET_ID_ANY);
+	ret = mlx5_devx_qp_create(priv->cdev->ctx, &(eqp->sw_qp),
+					attr.num_of_receive_wqes *
+					MLX5_WSEG_SIZE, &attr, SOCKET_ID_ANY);
 	if (ret) {
 		DRV_LOG(ERR, "Failed to create SW QP(%u).", rte_errno);
 		goto error;

https://lab.dpdk.org/results/dashboard/patchsets/20071/

UNH-IOL DPDK Community Lab

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-11-09  0:08 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-09  0:08 [dpdk-test-report] |WARNING| pw103994-103997 [PATCH] [V2, 4/4] common/mlx5: fix RQ size configuration in QP create dpdklab

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).