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.h...@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