On Wed, 18 Aug 2021 18:16:00 +0300 Yishai Hadas <yishaih@xxxxxxxxxx> wrote: > + > +static int vfio_pci_sriov_configure(struct pci_dev *pdev, int nr_virtfn) > +{ > + might_sleep(); vfio_pci_core_sriov_configure() retained the might_sleep(), it shouldn't be needed here. > + > + if (!enable_sriov) > + return -ENOENT; > + > + return vfio_pci_core_sriov_configure(pdev, nr_virtfn); > +} ... > @@ -509,7 +449,7 @@ static struct vfio_pci_core_device *get_pf_vdev(struct vfio_pci_core_device *vde > if (!pf_dev) > return NULL; > > - if (pci_dev_driver(physfn) != &vfio_pci_driver) { > + if (pci_dev_driver(physfn) != pci_dev_driver(vdev->pdev)) { I think this means that the PF and VF must use the same vfio-pci "variant" driver, it's too bad we're not enabling vfio-pci to own the PF while vfio-vendor-foo-pci owns the VF since our SR-IOV security model remains in the core. We can work on that later though, no loss of functionality here. ... > @@ -1795,12 +1723,12 @@ static int vfio_pci_bus_notifier(struct notifier_block *nb, > pci_info(vdev->pdev, "Captured SR-IOV VF %s driver_override\n", > pci_name(pdev)); > pdev->driver_override = kasprintf(GFP_KERNEL, "%s", > - vfio_pci_ops.name); > + vdev->vdev.ops->name); > } else if (action == BUS_NOTIFY_BOUND_DRIVER && > pdev->is_virtfn && physfn == vdev->pdev) { > struct pci_driver *drv = pci_dev_driver(pdev); > > - if (drv && drv != &vfio_pci_driver) > + if (drv && drv != pci_dev_driver(vdev->pdev)) > pci_warn(vdev->pdev, > "VF %s bound to driver %s while PF bound to vfio-pci\n", "vfio-pci" is hardcoded in this comment. There are a few other user visible instances of this in vfio-pci-core.c as well: MODULE_PARM_DESC(disable_vga, "Disable VGA resource access through vfio-pci"); ret = pci_request_selected_regions(pdev, 1 << index, "vfio-pci"); pci_info_ratelimited(vdev->pdev, "VF token incorrectly provided, PF not bound to vfio-pci\n"); We should try to fix or reword as many of these as we reasonably can. Thanks, Alex