From a8ee010e1361eb33a8ba86eec29d32f5a36d8e21 Mon Sep 17 00:00:00 2001 From: Evgeniy Kochetov Date: Fri, 13 Aug 2021 11:26:55 +0300 Subject: [PATCH] nvme/ctrlr: Add ANA log page allocation helper function This will simplify subsequent patches. Signed-off-by: Evgeniy Kochetov Change-Id: I2fc78c8bfec7270d6036f2c9ea9e0cf715fc9c7d Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/9178 Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Ben Walker Reviewed-by: Shuhei Matsumoto Community-CI: Broadcom CI Community-CI: Mellanox Build Bot --- lib/nvme/nvme_ctrlr.c | 46 ++++++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/lib/nvme/nvme_ctrlr.c b/lib/nvme/nvme_ctrlr.c index 8d1927cfc..d121ea854 100644 --- a/lib/nvme/nvme_ctrlr.c +++ b/lib/nvme/nvme_ctrlr.c @@ -672,6 +672,32 @@ static int nvme_ctrlr_set_intel_support_log_pages(struct spdk_nvme_ctrlr *ctrlr) return 0; } +static int +nvme_ctrlr_alloc_ana_log_page(struct spdk_nvme_ctrlr *ctrlr) +{ + uint32_t ana_log_page_size; + + ana_log_page_size = sizeof(struct spdk_nvme_ana_page) + ctrlr->cdata.nanagrpid * + sizeof(struct spdk_nvme_ana_group_descriptor) + ctrlr->cdata.nn * + sizeof(uint32_t); + + ctrlr->ana_log_page = calloc(1, ana_log_page_size); + if (ctrlr->ana_log_page == NULL) { + NVME_CTRLR_ERRLOG(ctrlr, "could not allocate ANA log page buffer\n"); + return -ENXIO; + } + + ctrlr->copied_ana_desc = calloc(1, ana_log_page_size); + if (ctrlr->copied_ana_desc == NULL) { + NVME_CTRLR_ERRLOG(ctrlr, "could not allocate a buffer to parse ANA descriptor\n"); + return -ENOMEM; + } + + ctrlr->ana_log_page_size = ana_log_page_size; + + return 0; +} + static int nvme_ctrlr_update_ana_log_page(struct spdk_nvme_ctrlr *ctrlr) { @@ -708,24 +734,12 @@ nvme_ctrlr_update_ana_log_page(struct spdk_nvme_ctrlr *ctrlr) static int nvme_ctrlr_init_ana_log_page(struct spdk_nvme_ctrlr *ctrlr) { - uint32_t ana_log_page_size; + int rc; - ana_log_page_size = sizeof(struct spdk_nvme_ana_page) + ctrlr->cdata.nanagrpid * - sizeof(struct spdk_nvme_ana_group_descriptor) + ctrlr->cdata.nn * - sizeof(uint32_t); - - ctrlr->ana_log_page = calloc(1, ana_log_page_size); - if (ctrlr->ana_log_page == NULL) { - NVME_CTRLR_ERRLOG(ctrlr, "could not allocate ANA log page buffer\n"); - return -ENXIO; + rc = nvme_ctrlr_alloc_ana_log_page(ctrlr); + if (rc) { + return rc; } - ctrlr->copied_ana_desc = calloc(1, ana_log_page_size); - if (ctrlr->copied_ana_desc == NULL) { - NVME_CTRLR_ERRLOG(ctrlr, "could not allocate a buffer to parse ANA descriptor\n"); - return -ENOMEM; - } - ctrlr->ana_log_page_size = ana_log_page_size; - return nvme_ctrlr_update_ana_log_page(ctrlr); }