Message ID | 20170830214139.GY8154@bhelgaas-glaptop.roam.corp.google.com (mailing list archive) |
---|---|
State | New, archived |
Delegated to: | Bjorn Helgaas |
Headers | show |
On Wed, Aug 30, 2017 at 04:41:39PM -0500, Bjorn Helgaas wrote: > I added some breadcrumbs to the changelog about this connection > between affinity and limiting the number of IRQs. Did I get this > right? > > This is on pci/host-vmd for v4.14. Awesome, sounds good to me! > commit be85af02e1b00d49cd678d8f2ea6f391bdbaca19 > Author: Keith Busch <keith.busch@intel.com> > Date: Wed Aug 30 12:15:04 2017 -0400 > > PCI: vmd: Remove IRQ affinity so we can allocate more IRQs > > VMD hardware has to share its vectors among child devices in its PCI > domain so we should allocate as many as possible rather than just ones > that can be affinitized. > > pci_alloc_irq_vectors_affinity() limits the number of affinitized IRQs to > the number of present CPUs (see irq_calc_affinity_vectors()). But we'd > prefer to have more vectors, even if they aren't distributed across the > CPUs, so use pci_alloc_irq_vectors() instead. > > Reported-by: Brad Goodman <Bradley.Goodman@dell.com> > Signed-off-by: Keith Busch <keith.busch@intel.com> > [bhelgaas: add irq_calc_affinity_vectors() reference to changelog] > Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
diff --git a/drivers/pci/host/vmd.c b/drivers/pci/host/vmd.c index 4fe1756af010..509893bc3e63 100644 --- a/drivers/pci/host/vmd.c +++ b/drivers/pci/host/vmd.c @@ -671,14 +671,6 @@ static int vmd_probe(struct pci_dev *dev, const struct pci_device_id *id) struct vmd_dev *vmd; int i, err; - /* - * The first vector is reserved for special use, so start affinity at - * the second vector - */ - struct irq_affinity affd = { - .pre_vectors = 1, - }; - if (resource_size(&dev->resource[VMD_CFGBAR]) < (1 << 20)) return -ENOMEM; @@ -704,8 +696,8 @@ static int vmd_probe(struct pci_dev *dev, const struct pci_device_id *id) if (vmd->msix_count < 0) return -ENODEV; - vmd->msix_count = pci_alloc_irq_vectors_affinity(dev, 1, vmd->msix_count, - PCI_IRQ_MSIX | PCI_IRQ_AFFINITY, &affd); + vmd->msix_count = pci_alloc_irq_vectors(dev, 1, vmd->msix_count, + PCI_IRQ_MSIX); if (vmd->msix_count < 0) return vmd->msix_count;