Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1464028
| From | Bjorn Helgaas <helgaas@kernel.org> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | Re: two pci_alloc_irq_vectors improvements |
| Date | 2016-08-16 21:40 +0200 |
| Message-ID | <s6Sno-7ee-13@gated-at.bofh.it> (permalink) |
| References | <s4YZX-4Uf-3@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
Hi Christoph, On Thu, Aug 11, 2016 at 07:11:03AM -0700, Christoph Hellwig wrote: > Hi Bjorn, hi Alex, > > below are two patches I'd love to see in 4.8 to improve the > pci_alloc_irq_vectors interface. I've realized we need these while > starting a mass conversion of the MSI-X users to the new interface, > and getting it into 4.8 before users show up should make life a lot > easier. > > The positive flags things comes out of the fact that a lot of driver > want MSI-X only without any fallback, or some elaborate differences > for the different interrupt schemes. For example while most modern > devices use one MSI-X vector per queue and scale nicely from the > MSI to the MSI-X scheme many older devices use a MSI-X vector per > functionality in the ISR, so they might wan to allocate them > differently. > > The second one ensures the legacy interrupt line is actually enabled > before using it, because some devices like MSI-X might actually have > it disable by default. I really like this change. It's much nicer to read if (flags & PCI_IRQ_AFFINITY) than it was to read if (!(flags & PCI_IRQ_NOAFFINITY)) Speaking of affinity, the original documentation said "By default this function will spread the interrupts around the available CPUs". After these patches, you have to pass PCI_IRQ_AFFINITY to get that behavior. Are you planning to have drivers use pci_alloc_irq_vectors(dev, 1, nvec, PCI_IRQ_ALL_TYPES | PCI_IRQ_AFFINITY) to explicitly ask for affinity? I applied these to for-linus with the intent of merging them for v4.8. I fixed a couple typos in the first one as shown below. Any objections, Alex? Bjorn diff --git a/Documentation/PCI/MSI-HOWTO.txt b/Documentation/PCI/MSI-HOWTO.txt index 8faf14a..cd9c9f6 100644 --- a/Documentation/PCI/MSI-HOWTO.txt +++ b/Documentation/PCI/MSI-HOWTO.txt @@ -96,9 +96,9 @@ if it can't meet the minimum number of vectors. The flags argument is used to specify which type of interrupt can be used by the device and the driver (PCI_IRQ_LEGACY, PCI_IRQ_MSI, PCI_IRQ_MSIX). -A conveniant short-hand (PCI_IRQ_ALL_TYPES) is also avaiable to ask for -any possible kind of interrupt. If the PCI_IRQ_NOAFFINITY flag is set, -pci_alloc_irq_vectors will spread the interrupts around the available CPUs. +A convenient short-hand (PCI_IRQ_ALL_TYPES) is also available to ask for +any possible kind of interrupt. If the PCI_IRQ_AFFINITY flag is set, +pci_alloc_irq_vectors() will spread the interrupts around the available CPUs. To get the Linux IRQ numbers passed to request_irq() and free_irq() and the vectors, use the following function: @@ -150,8 +150,7 @@ the single MSI mode for a device. It could be done by passing two 1s as goto out_err; Some devices might not support using legacy line interrupts, in which case -the PCI_IRQ_NOLEGACY flag can be used to fail the request if the platform -can't provide MSI or MSI-X interrupts: +the driver can specify that only MSI or MSI-X is acceptable: nvec = pci_alloc_irq_vectors(pdev, 1, nvec, PCI_IRQ_MSI | PCI_IRQ_MSIX); if (nvec < 0)
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
two pci_alloc_irq_vectors improvements Christoph Hellwig <hch@lst.de> - 2016-08-11 16:20 +0200
Re: two pci_alloc_irq_vectors improvements Christoph Hellwig <hch@infradead.org> - 2016-08-14 17:20 +0200
Re: two pci_alloc_irq_vectors improvements Bjorn Helgaas <helgaas@kernel.org> - 2016-08-16 21:40 +0200
Re: two pci_alloc_irq_vectors improvements Christoph Hellwig <hch@lst.de> - 2016-08-17 02:50 +0200
csiph-web