From: David Woodhouse <dwmw@xxxxxxxxxxxx> Allow userspace to configure SR-IOV VFs through sysfs. Currently, we need an in-kernel driver to permit this. But sometimes *all* we want to do is enable the VFs so that we can assign them to guests; we don't actually need to deal with the PF in any other way from the host kernel. So let's make it possible to use UIO for that. Signed-off-by: David Woodhouse <dwmw@xxxxxxxxxxxx> --- It's not entirely clear to me why we require the driver to "enable" SR-IOV like this anyway — were there some which needed to do something special and device-specific instead of just falling through to pci_{en,dis}able_sriov(), such that we need to effectively whitelist this in the driver rather than blacklisting the "problematic" ones via PCI quirks? drivers/uio/uio_pci_generic.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/uio/uio_pci_generic.c b/drivers/uio/uio_pci_generic.c index a56fdf9..bd196f0 100644 --- a/drivers/uio/uio_pci_generic.c +++ b/drivers/uio/uio_pci_generic.c @@ -108,15 +108,27 @@ static void remove(struct pci_dev *pdev) struct uio_pci_generic_dev *gdev = pci_get_drvdata(pdev); uio_unregister_device(&gdev->info); + pci_disable_sriov(pdev); pci_disable_device(pdev); kfree(gdev); } +static int sriov_configure(struct pci_dev *pdev, int num_vfs) +{ + if (!num_vfs) { + pci_disable_sriov(pdev); + return 0; + } + + return pci_enable_sriov(pdev, num_vfs); +} + static struct pci_driver uio_pci_driver = { .name = "uio_pci_generic", .id_table = NULL, /* only dynamic id's */ .probe = probe, .remove = remove, + .sriov_configure = sriov_configure, }; module_pci_driver(uio_pci_driver); -- 2.7.4 -- dwmw2
Attachment:
smime.p7s
Description: S/MIME cryptographic signature