[PATCH RFC 03/11] nvmet: Add nvmet_fabrics_ops flag to indicate SGLs not supported

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The nvmet_mdev_pci driver does not initially support SGLs. In some
prelim testing I don't think there will be a perf gain (the virt related
interface may be the major bottleneck so I may not notice) so I wasn't
sure if they will be required/needed. This adds a nvmet_fabrics_ops flag
so we can tell nvmet core to tell the host we do not supports SGLS.

Signed-off-by: Mike Christie <michael.christie@xxxxxxxxxx>
---
 drivers/nvme/target/admin-cmd.c | 13 +++++++------
 drivers/nvme/target/nvmet.h     |  1 +
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/drivers/nvme/target/admin-cmd.c b/drivers/nvme/target/admin-cmd.c
index acc138bbf8f2..486ed6f7b717 100644
--- a/drivers/nvme/target/admin-cmd.c
+++ b/drivers/nvme/target/admin-cmd.c
@@ -755,12 +755,13 @@ static void nvmet_execute_identify_ctrl(struct nvmet_req *req)
 	id->awun = 0;
 	id->awupf = 0;
 
-	/* we always support SGLs */
-	id->sgls = cpu_to_le32(NVME_CTRL_SGLS_BYTE_ALIGNED);
-	if (ctrl->ops->flags & NVMF_KEYED_SGLS)
-		id->sgls |= cpu_to_le32(NVME_CTRL_SGLS_KSDBDS);
-	if (req->port->inline_data_size)
-		id->sgls |= cpu_to_le32(NVME_CTRL_SGLS_SAOS);
+	if (!(ctrl->ops->flags & NVMF_SGLS_NOT_SUPP)) {
+		id->sgls = cpu_to_le32(NVME_CTRL_SGLS_BYTE_ALIGNED);
+		if (ctrl->ops->flags & NVMF_KEYED_SGLS)
+			id->sgls |= cpu_to_le32(NVME_CTRL_SGLS_KSDBDS);
+		if (req->port->inline_data_size)
+			id->sgls |= cpu_to_le32(NVME_CTRL_SGLS_SAOS);
+	}
 
 	strscpy(id->subnqn, ctrl->subsys->subsysnqn, sizeof(id->subnqn));
 
diff --git a/drivers/nvme/target/nvmet.h b/drivers/nvme/target/nvmet.h
index fcf4f460dc9a..ec3d10eb316a 100644
--- a/drivers/nvme/target/nvmet.h
+++ b/drivers/nvme/target/nvmet.h
@@ -403,6 +403,7 @@ struct nvmet_fabrics_ops {
 	unsigned int flags;
 #define NVMF_KEYED_SGLS			(1 << 0)
 #define NVMF_METADATA_SUPPORTED		(1 << 1)
+#define NVMF_SGLS_NOT_SUPP		(1 << 2)
 	void (*queue_response)(struct nvmet_req *req);
 	int (*add_port)(struct nvmet_port *port);
 	void (*remove_port)(struct nvmet_port *port);
-- 
2.43.0





[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux