1
0
Fork 0

PCI/MSI: Document pci_alloc_irq_vectors(), deprecate pci_enable_msi()

Document pci_alloc_irq_vectors() instead of the deprecated pci_enable_msi()
and pci_enable_msix() APIs.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
zero-colors
Christoph Hellwig 2017-02-15 08:58:22 +01:00 committed by Bjorn Helgaas
parent 948b7620c1
commit c3cf2c61dd
1 changed files with 11 additions and 11 deletions

View File

@ -382,18 +382,18 @@ The fundamental difference between MSI and MSI-X is how multiple
"vectors" get allocated. MSI requires contiguous blocks of vectors "vectors" get allocated. MSI requires contiguous blocks of vectors
while MSI-X can allocate several individual ones. while MSI-X can allocate several individual ones.
MSI capability can be enabled by calling pci_enable_msi() or MSI capability can be enabled by calling pci_alloc_irq_vectors() with the
pci_enable_msix() before calling request_irq(). This causes PCI_IRQ_MSI and/or PCI_IRQ_MSIX flags before calling request_irq(). This
the PCI support to program CPU vector data into the PCI device causes the PCI support to program CPU vector data into the PCI device
capability registers. capability registers. Many architectures, chip-sets, or BIOSes do NOT
support MSI or MSI-X and a call to pci_alloc_irq_vectors with just
the PCI_IRQ_MSI and PCI_IRQ_MSIX flags will fail, so try to always
specify PCI_IRQ_LEGACY as well.
If your PCI device supports both, try to enable MSI-X first. Drivers that have different interrupt handlers for MSI/MSI-X and
Only one can be enabled at a time. Many architectures, chip-sets, legacy INTx should chose the right one based on the msi_enabled
or BIOSes do NOT support MSI or MSI-X and the call to pci_enable_msi/msix and msix_enabled flags in the pci_dev structure after calling
will fail. This is important to note since many drivers have pci_alloc_irq_vectors.
two (or more) interrupt handlers: one for MSI/MSI-X and another for IRQs.
They choose which handler to register with request_irq() based on the
return value from pci_enable_msi/msix().
There are (at least) two really good reasons for using MSI: There are (at least) two really good reasons for using MSI:
1) MSI is an exclusive interrupt vector by definition. 1) MSI is an exclusive interrupt vector by definition.