[PATCH v2 01/21] common/idpf: added NVME CPF specific code with defines

Soumyadeep Hore soumyadeep.hore at intel.com
Tue Jun 4 10:05:51 CEST 2024


Removes NVME dependency on memory allocations and
uses a prepared buffer instead.

The changes do not affect other components.

Signed-off-by: Soumyadeep Hore <soumyadeep.hore at intel.com>
---
 drivers/common/idpf/base/idpf_controlq.c     | 23 +++++++++++++++++++-
 drivers/common/idpf/base/idpf_controlq_api.h |  7 +++++-
 2 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/drivers/common/idpf/base/idpf_controlq.c b/drivers/common/idpf/base/idpf_controlq.c
index a82ca628de..bada75abfc 100644
--- a/drivers/common/idpf/base/idpf_controlq.c
+++ b/drivers/common/idpf/base/idpf_controlq.c
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2001-2023 Intel Corporation
+ * Copyright(c) 2001-2024 Intel Corporation
  */
 
 #include "idpf_controlq.h"
@@ -145,8 +145,12 @@ int idpf_ctlq_add(struct idpf_hw *hw,
 	    qinfo->buf_size > IDPF_CTLQ_MAX_BUF_LEN)
 		return -EINVAL;
 
+#ifndef NVME_CPF
 	cq = (struct idpf_ctlq_info *)
 	     idpf_calloc(hw, 1, sizeof(struct idpf_ctlq_info));
+#else
+	cq = *cq_out;
+#endif
 	if (!cq)
 		return -ENOMEM;
 
@@ -172,10 +176,15 @@ int idpf_ctlq_add(struct idpf_hw *hw,
 	}
 
 	if (status)
+#ifdef NVME_CPF
+		return status;
+#else
 		goto init_free_q;
+#endif
 
 	if (is_rxq) {
 		idpf_ctlq_init_rxq_bufs(cq);
+#ifndef NVME_CPF
 	} else {
 		/* Allocate the array of msg pointers for TX queues */
 		cq->bi.tx_msg = (struct idpf_ctlq_msg **)
@@ -185,6 +194,7 @@ int idpf_ctlq_add(struct idpf_hw *hw,
 			status = -ENOMEM;
 			goto init_dealloc_q_mem;
 		}
+#endif
 	}
 
 	idpf_ctlq_setup_regs(cq, qinfo);
@@ -195,6 +205,7 @@ int idpf_ctlq_add(struct idpf_hw *hw,
 
 	LIST_INSERT_HEAD(&hw->cq_list_head, cq, cq_list);
 
+#ifndef NVME_CPF
 	*cq_out = cq;
 	return status;
 
@@ -204,6 +215,7 @@ int idpf_ctlq_add(struct idpf_hw *hw,
 init_free_q:
 	idpf_free(hw, cq);
 	cq = NULL;
+#endif
 
 	return status;
 }
@@ -232,8 +244,13 @@ void idpf_ctlq_remove(struct idpf_hw *hw,
  * destroyed. This must be called prior to using the individual add/remove
  * APIs.
  */
+#ifdef NVME_CPF
+int idpf_ctlq_init(struct idpf_hw *hw, u8 num_q,
+			struct idpf_ctlq_create_info *q_info, struct idpf_ctlq_info **ctlq)
+#else
 int idpf_ctlq_init(struct idpf_hw *hw, u8 num_q,
 		   struct idpf_ctlq_create_info *q_info)
+#endif
 {
 	struct idpf_ctlq_info *cq = NULL, *tmp = NULL;
 	int ret_code = 0;
@@ -244,6 +261,10 @@ int idpf_ctlq_init(struct idpf_hw *hw, u8 num_q,
 	for (i = 0; i < num_q; i++) {
 		struct idpf_ctlq_create_info *qinfo = q_info + i;
 
+#ifdef NVME_CPF
+		cq = *(ctlq + i);
+#endif
+
 		ret_code = idpf_ctlq_add(hw, qinfo, &cq);
 		if (ret_code)
 			goto init_destroy_qs;
diff --git a/drivers/common/idpf/base/idpf_controlq_api.h b/drivers/common/idpf/base/idpf_controlq_api.h
index 38f5d2df3c..6b6f3e84c2 100644
--- a/drivers/common/idpf/base/idpf_controlq_api.h
+++ b/drivers/common/idpf/base/idpf_controlq_api.h
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2001-2023 Intel Corporation
+ * Copyright(c) 2001-2024 Intel Corporation
  */
 
 #ifndef _IDPF_CONTROLQ_API_H_
@@ -158,8 +158,13 @@ enum idpf_mbx_opc {
 /* Will init all required q including default mb.  "q_info" is an array of
  * create_info structs equal to the number of control queues to be created.
  */
+#ifdef NVME_CPF
+int idpf_ctlq_init(struct idpf_hw *hw, u8 num_q,
+			struct idpf_ctlq_create_info *q_info, struct idpf_ctlq_info **ctlq);
+#else
 int idpf_ctlq_init(struct idpf_hw *hw, u8 num_q,
 		   struct idpf_ctlq_create_info *q_info);
+#endif
 
 /* Allocate and initialize a single control queue, which will be added to the
  * control queue list; returns a handle to the created control queue
-- 
2.43.0



More information about the dev mailing list