From 75f9a150a6408478911bb82cd19d75f1e9cb827e Mon Sep 17 00:00:00 2001 From: Mao Jiang Date: Sat, 8 May 2021 13:45:20 +0800 Subject: [PATCH] test/nvme_pcie_common: cases for creating and deleting IO queue Change-Id: I79237a63b0f3b414cb3300bf41ee6193ce35e60f Signed-off-by: Mao Jiang Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/7632 Community-CI: Mellanox Build Bot Reviewed-by: Aleksey Marchuk Reviewed-by: Changpeng Liu Tested-by: SPDK CI Jenkins --- .../nvme_pcie_common.c/nvme_pcie_common_ut.c | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/test/unit/lib/nvme/nvme_pcie_common.c/nvme_pcie_common_ut.c b/test/unit/lib/nvme/nvme_pcie_common.c/nvme_pcie_common_ut.c index 16ffdf996..7c5f8152b 100644 --- a/test/unit/lib/nvme/nvme_pcie_common.c/nvme_pcie_common_ut.c +++ b/test/unit/lib/nvme/nvme_pcie_common.c/nvme_pcie_common_ut.c @@ -212,6 +212,81 @@ test_nvme_pcie_qpair_construct_destroy(void) MOCK_CLEAR(spdk_vtophys); } +static void +test_nvme_pcie_ctrlr_cmd_create_delete_io_queue(void) +{ + struct spdk_nvme_ctrlr ctrlr = {}; + struct nvme_pcie_qpair pqpair = {}; + struct spdk_nvme_qpair adminq = {}; + struct nvme_request req = {}; + int rc; + + ctrlr.adminq = &adminq; + STAILQ_INIT(&ctrlr.adminq->free_req); + STAILQ_INSERT_HEAD(&ctrlr.adminq->free_req, &req, stailq); + pqpair.qpair.id = 1; + pqpair.num_entries = 1; + pqpair.cpl_bus_addr = 0xDEADBEEF; + pqpair.cmd_bus_addr = 0xDDADBEEF; + pqpair.qpair.qprio = SPDK_NVME_QPRIO_HIGH; + + rc = nvme_pcie_ctrlr_cmd_create_io_cq(&ctrlr, &pqpair.qpair, NULL, NULL); + CU_ASSERT(rc == 0); + CU_ASSERT(req.cmd.opc == SPDK_NVME_OPC_CREATE_IO_CQ); + CU_ASSERT(req.cmd.cdw10_bits.create_io_q.qid == 1); + CU_ASSERT(req.cmd.cdw10_bits.create_io_q.qsize == 0); + CU_ASSERT(req.cmd.cdw11_bits.create_io_cq.pc == 1); + CU_ASSERT(req.cmd.dptr.prp.prp1 == 0xDEADBEEF); + CU_ASSERT(STAILQ_EMPTY(&ctrlr.adminq->free_req)); + + memset(&req, 0, sizeof(req)); + STAILQ_INSERT_HEAD(&ctrlr.adminq->free_req, &req, stailq); + + rc = nvme_pcie_ctrlr_cmd_create_io_sq(&ctrlr, &pqpair.qpair, NULL, NULL); + CU_ASSERT(rc == 0); + CU_ASSERT(req.cmd.opc == SPDK_NVME_OPC_CREATE_IO_SQ); + CU_ASSERT(req.cmd.cdw10_bits.create_io_q.qid == 1); + CU_ASSERT(req.cmd.cdw10_bits.create_io_q.qsize == 0); + CU_ASSERT(req.cmd.cdw11_bits.create_io_sq.pc == 1); + CU_ASSERT(req.cmd.cdw11_bits.create_io_sq.qprio == SPDK_NVME_QPRIO_HIGH); + CU_ASSERT(req.cmd.cdw11_bits.create_io_sq.cqid = 1); + CU_ASSERT(req.cmd.dptr.prp.prp1 == 0xDDADBEEF); + CU_ASSERT(STAILQ_EMPTY(&ctrlr.adminq->free_req)); + + /* No free request available */ + rc = nvme_pcie_ctrlr_cmd_create_io_cq(&ctrlr, &pqpair.qpair, NULL, NULL); + CU_ASSERT(rc == -ENOMEM); + + rc = nvme_pcie_ctrlr_cmd_create_io_sq(&ctrlr, &pqpair.qpair, NULL, NULL); + CU_ASSERT(rc == -ENOMEM); + + /* Delete cq or sq */ + memset(&req, 0, sizeof(req)); + STAILQ_INSERT_HEAD(&ctrlr.adminq->free_req, &req, stailq); + + rc = nvme_pcie_ctrlr_cmd_delete_io_cq(&ctrlr, &pqpair.qpair, NULL, NULL); + CU_ASSERT(rc == 0); + CU_ASSERT(req.cmd.opc == SPDK_NVME_OPC_DELETE_IO_CQ); + CU_ASSERT(req.cmd.cdw10_bits.delete_io_q.qid == 1); + CU_ASSERT(STAILQ_EMPTY(&ctrlr.adminq->free_req)); + + memset(&req, 0, sizeof(req)); + STAILQ_INSERT_HEAD(&ctrlr.adminq->free_req, &req, stailq); + + rc = nvme_pcie_ctrlr_cmd_delete_io_sq(&ctrlr, &pqpair.qpair, NULL, NULL); + CU_ASSERT(rc == 0); + CU_ASSERT(req.cmd.opc == SPDK_NVME_OPC_DELETE_IO_SQ); + CU_ASSERT(req.cmd.cdw10_bits.delete_io_q.qid == 1); + CU_ASSERT(STAILQ_EMPTY(&ctrlr.adminq->free_req)); + + /* No free request available */ + rc = nvme_pcie_ctrlr_cmd_delete_io_cq(&ctrlr, &pqpair.qpair, NULL, NULL); + CU_ASSERT(rc == -ENOMEM); + + rc = nvme_pcie_ctrlr_cmd_delete_io_sq(&ctrlr, &pqpair.qpair, NULL, NULL); + CU_ASSERT(rc == -ENOMEM); +} + int main(int argc, char **argv) { CU_pSuite suite = NULL; @@ -223,6 +298,7 @@ int main(int argc, char **argv) suite = CU_add_suite("nvme_pcie_common", NULL, NULL); CU_ADD_TEST(suite, test_nvme_pcie_ctrlr_alloc_cmb); CU_ADD_TEST(suite, test_nvme_pcie_qpair_construct_destroy); + CU_ADD_TEST(suite, test_nvme_pcie_ctrlr_cmd_create_delete_io_queue); CU_basic_set_mode(CU_BRM_VERBOSE); CU_basic_run_tests();