On Mon, Mar 20, 2017 at 05:14:34PM +0200, bodong@xxxxxxxxxxxx wrote:Gavin, thanks for the review. That is indeed an interesting suggestion. Theoretically, we can change that probe_vfs from boolean to integer. And use it as a counter to probe the first N VFs(if N < total_vfs). Let's see if there are any objections.
From: Bodong Wang <bodong@xxxxxxxxxxxx>>from PF, all current callers still retain the same functionality.
Sometimes it is not desirable to probe the virtual functions after
SRIOV is enabled. This can save host side resource usage by VF
instances which would be eventually probed to VMs.
Added a new PCI sysfs interface "sriov_probe_vfs" to control that
To modify it, echo 0/n/N (disable probe) or 1/y/Y (enable probe) toBodong, I'm not sure if there is a requirement to load driver for the
/sys/bus/pci/devices/<DOMAIN:BUS:DEVICE.FUNCTION>/sriov_probe_vfs
Note that, the choice must be made before enabling VFs. The change
will not take effect if VFs are already enabled. Simply, one can set
sriov_numvfs to 0, choose whether to probe or not, and then resume
sriov_numvfs.
specified number of VFs? That indicates no driver will be loaded for
other VFs. If so, this interface might serve the purpose as well.
It's doable, but what's the benefit?
+#ifdef CONFIG_PCI_IOV
+ if (!pci_dev->is_virtfn ||
+ (pci_dev->is_virtfn && pci_dev->physfn->sriov->probe_vfs)) {
+#endif
+ error = __pci_device_probe(drv, pci_dev);
+ if (error) {
+ pcibios_free_irq(pci_dev);
+ pci_dev_put(pci_dev);
+ }
+#ifdef CONFIG_PCI_IOV
}
+#endif
I think it's reasonable to have a inline function for this check:
should be return (!pdev->is_virtfn || (pci_dev->is_virtfn && pci_dev->physfn->sriov->probe_vfs));
#ifdef CONFIG_PCI_IOV
static inline bool pci_device_can_probe(struct pci_dev *pdev)
{
return (!pdev->is_virtfn || pdev->physfn->sriov->probe_vfs);
}This function will be a waste if CONFIG_PCI_IOV is not defined.
#else
static inline bool pci_device_can_probe(struct pci_dev *pdev)
{
return true;
}
#endif
Thanks,
Gavin