Re: [PATCH] pci: Do not read INTx PIN and LINE registers for virtual functions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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)



[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux