From a58f17e765b97de13e9ed73e22981ca0b26f2f45 Mon Sep 17 00:00:00 2001 From: Swapnil Ingle Date: Mon, 25 Oct 2021 09:43:50 -0400 Subject: [PATCH] nvmf/vfio_user: use configurable max_qpairs_per_ctrlr User may configure opts.max_qpairs_per_ctrlr, so use opts.max_qpairs_per_ctrlr instead of using fixed default NVMF_VFIO_USER_DEFAULT_MAX_QPAIRS_PER_CTRLR. Also do not allow users to configure max_qpairs_per_ctrl > NVMF_VFIO_USER_DEFAULT_MAX_QPAIRS_PER_CTRLR. Signed-off-by: Swapnil Ingle Change-Id: Id9f1f796559f3bb8b2d3f5031606050470681b99 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/9994 Community-CI: Broadcom CI Tested-by: SPDK CI Jenkins Reviewed-by: John Levon Reviewed-by: Changpeng Liu Reviewed-by: Aleksey Marchuk --- lib/nvmf/vfio_user.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/nvmf/vfio_user.c b/lib/nvmf/vfio_user.c index a79fadad3..b17e42e89 100644 --- a/lib/nvmf/vfio_user.c +++ b/lib/nvmf/vfio_user.c @@ -555,6 +555,12 @@ nvmf_vfio_user_create(struct spdk_nvmf_transport_opts *opts) struct nvmf_vfio_user_transport *vu_transport; int err; + if (opts->max_qpairs_per_ctrlr > NVMF_VFIO_USER_DEFAULT_MAX_QPAIRS_PER_CTRLR) { + SPDK_ERRLOG("Invalid max_qpairs_per_ctrlr=%d, supported max_qpairs_per_ctrlr=%d\n", + opts->max_qpairs_per_ctrlr, NVMF_VFIO_USER_DEFAULT_MAX_QPAIRS_PER_CTRLR); + return NULL; + } + vu_transport = calloc(1, sizeof(*vu_transport)); if (vu_transport == NULL) { SPDK_ERRLOG("Transport alloc fail: %m\n"); @@ -1098,14 +1104,15 @@ handle_create_io_q(struct nvmf_vfio_user_ctrlr *ctrlr, int err = 0; struct nvmf_vfio_user_qpair *vu_qpair; struct nvme_q *io_q; + struct nvmf_vfio_user_transport *vu_transport = ctrlr->transport; assert(ctrlr != NULL); assert(cmd != NULL); qid = cmd->cdw10_bits.create_io_q.qid; - if (qid == 0 || qid >= NVMF_VFIO_USER_DEFAULT_MAX_QPAIRS_PER_CTRLR) { + if (qid == 0 || qid >= vu_transport->transport.opts.max_qpairs_per_ctrlr) { SPDK_ERRLOG("%s: invalid QID=%d, max=%d\n", ctrlr_id(ctrlr), - qid, NVMF_VFIO_USER_DEFAULT_MAX_QPAIRS_PER_CTRLR); + qid, vu_transport->transport.opts.max_qpairs_per_ctrlr); sct = SPDK_NVME_SCT_COMMAND_SPECIFIC; sc = SPDK_NVME_SC_INVALID_QUEUE_IDENTIFIER; goto out;