mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 17:30:02 +00:00
PCI/MSI: Move pci_alloc_irq_vectors() to api.c
To disentangle the maze in msi.c, all exported device-driver MSI APIs are now to be grouped in one file, api.c. Make pci_alloc_irq_vectors() a real function instead of wrapper and add proper kernel doc to it. Signed-off-by: Ahmed S. Darwish <darwi@linutronix.de> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Acked-by: Bjorn Helgaas <bhelgaas@google.com> Link: https://lore.kernel.org/r/20221111122014.870888193@linutronix.de
This commit is contained in:
parent
be7496c1ef
commit
5c0997dc33
2 changed files with 44 additions and 4 deletions
|
@ -90,3 +90,36 @@ int pci_enable_msix_range(struct pci_dev *dev, struct msix_entry *entries,
|
||||||
return __pci_enable_msix_range(dev, entries, minvec, maxvec, NULL, 0);
|
return __pci_enable_msix_range(dev, entries, minvec, maxvec, NULL, 0);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(pci_enable_msix_range);
|
EXPORT_SYMBOL(pci_enable_msix_range);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* pci_alloc_irq_vectors() - Allocate multiple device interrupt vectors
|
||||||
|
* @dev: the PCI device to operate on
|
||||||
|
* @min_vecs: minimum required number of vectors (must be >= 1)
|
||||||
|
* @max_vecs: maximum desired number of vectors
|
||||||
|
* @flags: One or more of:
|
||||||
|
* %PCI_IRQ_MSIX Allow trying MSI-X vector allocations
|
||||||
|
* %PCI_IRQ_MSI Allow trying MSI vector allocations
|
||||||
|
* %PCI_IRQ_LEGACY Allow trying legacy INTx interrupts, if
|
||||||
|
* and only if @min_vecs == 1
|
||||||
|
* %PCI_IRQ_AFFINITY Auto-manage IRQs affinity by spreading
|
||||||
|
* the vectors around available CPUs
|
||||||
|
*
|
||||||
|
* Allocate up to @max_vecs interrupt vectors on device. MSI-X irq
|
||||||
|
* vector allocation has a higher precedence over plain MSI, which has a
|
||||||
|
* higher precedence over legacy INTx emulation.
|
||||||
|
*
|
||||||
|
* Upon a successful allocation, the caller should use pci_irq_vector()
|
||||||
|
* to get the Linux IRQ number to be passed to request_threaded_irq().
|
||||||
|
* The driver must call pci_free_irq_vectors() on cleanup.
|
||||||
|
*
|
||||||
|
* Return: number of allocated vectors (which might be smaller than
|
||||||
|
* @max_vecs), -ENOSPC if less than @min_vecs interrupt vectors are
|
||||||
|
* available, other errnos otherwise.
|
||||||
|
*/
|
||||||
|
int pci_alloc_irq_vectors(struct pci_dev *dev, unsigned int min_vecs,
|
||||||
|
unsigned int max_vecs, unsigned int flags)
|
||||||
|
{
|
||||||
|
return pci_alloc_irq_vectors_affinity(dev, min_vecs, max_vecs,
|
||||||
|
flags, NULL);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(pci_alloc_irq_vectors);
|
||||||
|
|
|
@ -1553,6 +1553,8 @@ static inline int pci_enable_msix_exact(struct pci_dev *dev,
|
||||||
return rc;
|
return rc;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
int pci_alloc_irq_vectors(struct pci_dev *dev, unsigned int min_vecs,
|
||||||
|
unsigned int max_vecs, unsigned int flags);
|
||||||
int pci_alloc_irq_vectors_affinity(struct pci_dev *dev, unsigned int min_vecs,
|
int pci_alloc_irq_vectors_affinity(struct pci_dev *dev, unsigned int min_vecs,
|
||||||
unsigned int max_vecs, unsigned int flags,
|
unsigned int max_vecs, unsigned int flags,
|
||||||
struct irq_affinity *affd);
|
struct irq_affinity *affd);
|
||||||
|
@ -1586,6 +1588,13 @@ pci_alloc_irq_vectors_affinity(struct pci_dev *dev, unsigned int min_vecs,
|
||||||
return 1;
|
return 1;
|
||||||
return -ENOSPC;
|
return -ENOSPC;
|
||||||
}
|
}
|
||||||
|
static inline int
|
||||||
|
pci_alloc_irq_vectors(struct pci_dev *dev, unsigned int min_vecs,
|
||||||
|
unsigned int max_vecs, unsigned int flags)
|
||||||
|
{
|
||||||
|
return pci_alloc_irq_vectors_affinity(dev, min_vecs, max_vecs,
|
||||||
|
flags, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
static inline void pci_free_irq_vectors(struct pci_dev *dev)
|
static inline void pci_free_irq_vectors(struct pci_dev *dev)
|
||||||
{
|
{
|
||||||
|
@ -1898,15 +1907,13 @@ pci_alloc_irq_vectors_affinity(struct pci_dev *dev, unsigned int min_vecs,
|
||||||
{
|
{
|
||||||
return -ENOSPC;
|
return -ENOSPC;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_PCI */
|
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
pci_alloc_irq_vectors(struct pci_dev *dev, unsigned int min_vecs,
|
pci_alloc_irq_vectors(struct pci_dev *dev, unsigned int min_vecs,
|
||||||
unsigned int max_vecs, unsigned int flags)
|
unsigned int max_vecs, unsigned int flags)
|
||||||
{
|
{
|
||||||
return pci_alloc_irq_vectors_affinity(dev, min_vecs, max_vecs, flags,
|
return -ENOSPC;
|
||||||
NULL);
|
|
||||||
}
|
}
|
||||||
|
#endif /* CONFIG_PCI */
|
||||||
|
|
||||||
/* Include architecture-dependent settings and functions */
|
/* Include architecture-dependent settings and functions */
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue