SR-IOV

Keith Busch keith.busch at intel.com
Fri Aug 22 07:18:17 PDT 2014


On Thu, 21 Aug 2014, sheng qiu wrote:
> May i ask is SR-IOV currently enabled on the NVMe driver side (linux)
> ? if not, is there any plan for it?

It's not implemented in the linux driver, but no one's proposed a patch
yet either. I've been holding on to this one for a while, but haven't
been able to test.
---

diff --git a/drivers/block/nvme-core.c b/drivers/block/nvme-core.c
index 28aec2d..70b6476 100644
--- a/drivers/block/nvme-core.c
+++ b/drivers/block/nvme-core.c
@@ -2961,6 +2961,24 @@ static int nvme_resume(struct device *dev)

  static SIMPLE_DEV_PM_OPS(nvme_dev_pm_ops, nvme_suspend, nvme_resume);

+static int nvme_pci_sriov_configure(struct pci_dev *pdev, int numvfs)
+{
+	if (!pdev->is_physfn)
+		return -EPERM;
+	if (numvfs == 0) {
+		if (pci_vfs_assigned(pdev)) {
+			dev_warn(&pdev->dev,
+				 "Cannot disable SR-IOV VFs while assigned\n");
+			return -EPERM;
+		}
+		pci_disable_sriov(pdev);
+	}
+	else
+		pci_enable_sriov(pdev, numvfs);
+
+	return 0;
+}
+
  static const struct pci_error_handlers nvme_err_handler = {
  	.error_detected	= nvme_error_detected,
  	.mmio_enabled	= nvme_dump_registers,
@@ -2988,6 +3006,7 @@ static struct pci_driver nvme_driver = {
  	.driver		= {
  		.pm	= &nvme_dev_pm_ops,
  	},
+	.sriov_configure = nvme_pci_sriov_configure,
  	.err_handler	= &nvme_err_handler,
  };
--




More information about the Linux-nvme mailing list