From 6237da13c07af542abd887d6d7048f31e10109f4 Mon Sep 17 00:00:00 2001 From: Jacek Kalwas Date: Thu, 25 Nov 2021 13:24:14 -0500 Subject: [PATCH] nvmf: allow to override aer limit by specific transport it is possible that some specific transport doesn't support NVMF_MAX_ASYNC_EVENTS (although it is a recommended value by spec) with that change it is possible to reduce aerl on transport specific layer so it can be advertised correctly during identify controller Signed-off-by: Jacek Kalwas Change-Id: Ife6465b5324fb39f9b343c6f42b860e9dd1164b2 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/10422 Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins Reviewed-by: Konrad Sztyber Reviewed-by: Ben Walker Reviewed-by: Changpeng Liu --- include/spdk/nvmf_transport.h | 1 + lib/nvmf/ctrlr.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/include/spdk/nvmf_transport.h b/include/spdk/nvmf_transport.h index 1cf364e61..2ff83f998 100644 --- a/include/spdk/nvmf_transport.h +++ b/include/spdk/nvmf_transport.h @@ -201,6 +201,7 @@ struct spdk_nvmf_listener { * A subset of struct spdk_nvme_ctrlr_data that are emulated by a fabrics device. */ struct spdk_nvmf_ctrlr_data { + uint8_t aerl; uint16_t kas; /** pci vendor id */ uint16_t vid; diff --git a/lib/nvmf/ctrlr.c b/lib/nvmf/ctrlr.c index 966d503e9..12e3e0c40 100644 --- a/lib/nvmf/ctrlr.c +++ b/lib/nvmf/ctrlr.c @@ -304,6 +304,7 @@ static void nvmf_ctrlr_cdata_init(struct spdk_nvmf_transport *transport, struct spdk_nvmf_subsystem *subsystem, struct spdk_nvmf_ctrlr_data *cdata) { + cdata->aerl = NVMF_MAX_ASYNC_EVENTS - 1; cdata->kas = KAS_DEFAULT_VALUE; cdata->vid = SPDK_PCI_VID_INTEL; cdata->ssvid = SPDK_PCI_VID_INTEL; @@ -2498,7 +2499,7 @@ spdk_nvmf_ctrlr_identify_ctrlr(struct spdk_nvmf_ctrlr *ctrlr, struct spdk_nvme_c cdata->mdts = spdk_u32log2(transport->opts.max_io_size / 4096); cdata->cntlid = ctrlr->cntlid; cdata->ver = ctrlr->vcprop.vs; - cdata->aerl = NVMF_MAX_ASYNC_EVENTS - 1; + cdata->aerl = ctrlr->cdata.aerl; cdata->lpa.edlp = 1; cdata->elpe = 127; cdata->maxcmd = transport->opts.max_queue_depth;