PCI: vmd: Assign vector zero to all bridges
authorKeith Busch <keith.busch@intel.com>
Thu, 20 Jul 2017 23:33:54 +0000 (19:33 -0400)
committerBjorn Helgaas <bhelgaas@google.com>
Thu, 3 Aug 2017 21:51:19 +0000 (16:51 -0500)
We don't want slower IRQ handlers impacting faster devices that happen to
be assigned the same VMD interrupt vector. The driver was trying to
separate such devices by checking if MSI-X wasn't used, but really we just
don't want endpoint devices to share with bridges. Most bridges may use MSI
currently, so that criteria happened to work, but newer ones may use MSI-X,
so this patch explicitly checks the device type when choosing a vector.

Signed-off-by: Keith Busch <keith.busch@intel.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/host/vmd.c

index 539da102f3d757a784ab899a6caf504f813d4b79..7e967a8784b2c5bc1b9c227f8406e60a7222b921 100644 (file)
@@ -183,7 +183,7 @@ static struct vmd_irq_list *vmd_next_irq(struct vmd_dev *vmd, struct msi_desc *d
        int i, best = 1;
        unsigned long flags;
 
-       if (!desc->msi_attrib.is_msix || vmd->msix_count == 1)
+       if (pci_is_bridge(msi_desc_to_pci_dev(desc)) || vmd->msix_count == 1)
                return &vmd->irqs[0];
 
        raw_spin_lock_irqsave(&list_lock, flags);