On Wed, Jan 17, 2018 at 07:30:29PM +0100, KarimAllah Ahmed wrote: > ... since INTx is not supported by-spec for virtual functions. > > Cc: Bjorn Helgaas <bhelgaas@xxxxxxxxxx> > Cc: linux-pci@xxxxxxxxxxxxxxx > Cc: linux-kernel@xxxxxxxxxxxxxxx > Signed-off-by: KarimAllah Ahmed <karahmed@xxxxxxxxx> > Signed-off-by: Jan H. Schönherr <jschoenh@xxxxxxxxx> Applied to pci/virtualization for v4.17, thanks! I tweaked the changelog to include the motivation: commit 16edf1c6345ab177ccf1e8b5ba3324ee01a50eb7 Author: KarimAllah Ahmed <karahmed@xxxxxxxxx> Date: Wed Jan 17 19:30:29 2018 +0100 PCI/IOV: Skip INTx config reads for VFs Per PCIe r4.0, sec 9.2.1.4, VFs can not implement INTX, and their Interrupt Line and Interrupt Pin registers must be RO Zero. Some devices have thousands of VFs, so skip reading the registers as an optimization. Signed-off-by: KarimAllah Ahmed <karahmed@xxxxxxxxx> Signed-off-by: Jan H. Schönherr <jschoenh@xxxxxxxxx> [bhelgaas: changelog, comment] Signed-off-by: Bjorn Helgaas <helgaas@xxxxxxxxxx> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index 489660d0d384..a1cddca37793 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -1230,6 +1230,13 @@ static void pci_read_irq(struct pci_dev *dev) { unsigned char irq; + /* VFs are not allowed to use INTx, so skip the config reads */ + if (dev->is_virtfn) { + dev->pin = 0; + dev->irq = 0; + return; + } + pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &irq); dev->pin = irq; if (irq)