From 49e433f8ed1906334b4f714ba743ad3670277d5e Mon Sep 17 00:00:00 2001 From: Evgeniy Kochetov Date: Fri, 13 Aug 2021 11:09:16 +0300 Subject: [PATCH] nvme/ctrlr: Allocate non-DMA memory for ANA log page Log page reading function 'spdk_nvme_ctrlr_cmd_get_log_page' does read into intermediate buffer and then copy to user provided buffer. So, there is no need for user buffer to allow DMA. Signed-off-by: Evgeniy Kochetov Change-Id: I7337afa99c3ae666cc43ea2a48317de875334cfc Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/9177 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 | 5 ++--- test/unit/lib/nvme/nvme_ctrlr.c/nvme_ctrlr_ut.c | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/nvme/nvme_ctrlr.c b/lib/nvme/nvme_ctrlr.c index 9c4ed943e..8d1927cfc 100644 --- a/lib/nvme/nvme_ctrlr.c +++ b/lib/nvme/nvme_ctrlr.c @@ -714,8 +714,7 @@ nvme_ctrlr_init_ana_log_page(struct spdk_nvme_ctrlr *ctrlr) sizeof(struct spdk_nvme_ana_group_descriptor) + ctrlr->cdata.nn * sizeof(uint32_t); - ctrlr->ana_log_page = spdk_zmalloc(ana_log_page_size, 64, NULL, SPDK_ENV_SOCKET_ID_ANY, - SPDK_MALLOC_DMA); + 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; @@ -3705,7 +3704,7 @@ nvme_ctrlr_destruct_poll_async(struct spdk_nvme_ctrlr *ctrlr, spdk_bit_array_free(&ctrlr->free_io_qids); - spdk_free(ctrlr->ana_log_page); + free(ctrlr->ana_log_page); free(ctrlr->copied_ana_desc); ctrlr->ana_log_page = NULL; ctrlr->copied_ana_desc = NULL; diff --git a/test/unit/lib/nvme/nvme_ctrlr.c/nvme_ctrlr_ut.c b/test/unit/lib/nvme/nvme_ctrlr.c/nvme_ctrlr_ut.c index 3534a9ee8..34146b398 100644 --- a/test/unit/lib/nvme/nvme_ctrlr.c/nvme_ctrlr_ut.c +++ b/test/unit/lib/nvme/nvme_ctrlr.c/nvme_ctrlr_ut.c @@ -2884,7 +2884,7 @@ test_nvme_ctrlr_set_supported_log_pages(void) CU_ASSERT(ctrlr.ana_log_page_size == sizeof(struct spdk_nvme_ana_page) + sizeof(struct spdk_nvme_ana_group_descriptor) * 1 + sizeof(uint32_t) * 1); CU_ASSERT(ctrlr.log_page_supported[SPDK_NVME_LOG_ASYMMETRIC_NAMESPACE_ACCESS] == true); - spdk_free(ctrlr.ana_log_page); + free(ctrlr.ana_log_page); free(ctrlr.copied_ana_desc); } @@ -2960,7 +2960,7 @@ test_nvme_ctrlr_parse_ana_log_page(void) CU_ASSERT(ns[2].ana_group_id == 1); CU_ASSERT(ns[2].ana_state == SPDK_NVME_ANA_OPTIMIZED_STATE); - spdk_free(ctrlr.ana_log_page); + free(ctrlr.ana_log_page); free(ctrlr.copied_ana_desc); }