Commit 9bfa9cb8 authored by Changpeng Liu's avatar Changpeng Liu Committed by Jim Harris
Browse files

nvmf/vfio-user: report that SGL is supported



Change-Id: Ia9938a3e5a4c8e4a3080039e5e309d5d10b0b77d
Signed-off-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/7280


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatar <dongx.yi@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Community-CI: Broadcom CI
parent 55f0d41f
Loading
Loading
Loading
Loading
+9 −9
Original line number Diff line number Diff line
@@ -553,7 +553,7 @@ _map_one(void *prv, uint64_t addr, uint64_t len)
}

static int
vfio_user_map_prps(struct nvmf_vfio_user_ctrlr *ctrlr, struct spdk_nvmf_request *req,
vfio_user_map_cmd(struct nvmf_vfio_user_ctrlr *ctrlr, struct spdk_nvmf_request *req,
		  struct iovec *iov, uint32_t length)
{
	/* Map PRP list to from Guest physical memory to
@@ -1759,7 +1759,8 @@ nvmf_vfio_user_cdata_init(struct spdk_nvmf_transport *transport,
			  struct spdk_nvmf_subsystem *subsystem,
			  struct spdk_nvmf_ctrlr_data *cdata)
{
	cdata->sgls.supported = SPDK_NVME_SGLS_NOT_SUPPORTED;
	memset(&cdata->sgls, 0, sizeof(struct spdk_nvme_cdata_sgls));
	cdata->sgls.supported = SPDK_NVME_SGLS_SUPPORTED_DWORD_ALIGNED;
}

static int
@@ -2217,8 +2218,9 @@ map_admin_cmd_req(struct nvmf_vfio_user_ctrlr *ctrlr, struct spdk_nvmf_request *
	if (!cmd->dptr.prp.prp1 || !len) {
		return 0;
	}

	iovcnt = vfio_user_map_prps(ctrlr, req, req->iov, len);
	/* ADMIN command will not use SGL */
	assert(req->cmd->nvme_cmd.psdt == 0);
	iovcnt = vfio_user_map_cmd(ctrlr, req, req->iov, len);
	if (iovcnt < 0) {
		SPDK_ERRLOG("%s: map Admin Opc %x failed\n",
			    ctrlr_id(ctrlr), cmd->opc);
@@ -2253,17 +2255,15 @@ map_io_cmd_req(struct nvmf_vfio_user_ctrlr *ctrlr, struct spdk_nvmf_request *req
		return 0;
	}

	/* SGL isn't supported now */
	assert(req->cmd->nvme_cmd.psdt == 0);
	err = get_nvmf_io_req_length(req);
	if (err < 0) {
		return -EINVAL;
	}

	req->length = err;
	err = vfio_user_map_prps(ctrlr, req, req->iov, req->length);
	err = vfio_user_map_cmd(ctrlr, req, req->iov, req->length);
	if (err < 0) {
		SPDK_ERRLOG("%s: failed to map PRP: %d\n", ctrlr_id(ctrlr), err);
		SPDK_ERRLOG("%s: failed to map IO OPC %u\n", ctrlr_id(ctrlr), cmd->opc);
		return -EFAULT;
	}