Commit a8ee010e authored by Evgeniy Kochetov's avatar Evgeniy Kochetov Committed by Tomasz Zawadzki
Browse files

nvme/ctrlr: Add ANA log page allocation helper function



This will simplify subsequent patches.

Signed-off-by: default avatarEvgeniy Kochetov <evgeniik@nvidia.com>
Change-Id: I2fc78c8bfec7270d6036f2c9ea9e0cf715fc9c7d
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/9178


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Community-CI: Mellanox Build Bot
parent 49e433f8
Loading
Loading
Loading
Loading
+30 −16
Original line number Diff line number Diff line
@@ -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;

	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);
	int rc;

	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;
	rc = nvme_ctrlr_alloc_ana_log_page(ctrlr);
	if (rc) {
		return rc;
	}
	ctrlr->ana_log_page_size = ana_log_page_size;


	return nvme_ctrlr_update_ana_log_page(ctrlr);
}