PCI/MSI: Move pci_irq_get_affinity() 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. Move pci_irq_get_affinity() and let its kernel-doc match rest of the file. 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/20221111122015.214792769@linutronix.de
This commit is contained in:
Родитель
18e1926b8c
Коммит
be37b8428b
|
@ -9,6 +9,7 @@
|
|||
*/
|
||||
|
||||
#include <linux/export.h>
|
||||
#include <linux/irq.h>
|
||||
|
||||
#include "msi.h"
|
||||
|
||||
|
@ -250,6 +251,48 @@ int pci_irq_vector(struct pci_dev *dev, unsigned int nr)
|
|||
}
|
||||
EXPORT_SYMBOL(pci_irq_vector);
|
||||
|
||||
/**
|
||||
* pci_irq_get_affinity() - Get a device interrupt vector affinity
|
||||
* @dev: the PCI device to operate on
|
||||
* @nr: device-relative interrupt vector index (0-based); has different
|
||||
* meanings, depending on interrupt mode
|
||||
* MSI-X the index in the MSI-X vector table
|
||||
* MSI the index of the enabled MSI vectors
|
||||
* INTx must be 0
|
||||
*
|
||||
* Return: MSI/MSI-X vector affinity, NULL if @nr is out of range or if
|
||||
* the MSI(-X) vector was allocated without explicit affinity
|
||||
* requirements (e.g., by pci_enable_msi(), pci_enable_msix_range(), or
|
||||
* pci_alloc_irq_vectors() without the %PCI_IRQ_AFFINITY flag). Return a
|
||||
* generic set of CPU IDs representing all possible CPUs available
|
||||
* during system boot if the device is in legacy INTx mode.
|
||||
*/
|
||||
const struct cpumask *pci_irq_get_affinity(struct pci_dev *dev, int nr)
|
||||
{
|
||||
int idx, irq = pci_irq_vector(dev, nr);
|
||||
struct msi_desc *desc;
|
||||
|
||||
if (WARN_ON_ONCE(irq <= 0))
|
||||
return NULL;
|
||||
|
||||
desc = irq_get_msi_desc(irq);
|
||||
/* Non-MSI does not have the information handy */
|
||||
if (!desc)
|
||||
return cpu_possible_mask;
|
||||
|
||||
/* MSI[X] interrupts can be allocated without affinity descriptor */
|
||||
if (!desc->affinity)
|
||||
return NULL;
|
||||
|
||||
/*
|
||||
* MSI has a mask array in the descriptor.
|
||||
* MSI-X has a single mask.
|
||||
*/
|
||||
idx = dev->msi_enabled ? nr : 0;
|
||||
return &desc->affinity[idx].mask;
|
||||
}
|
||||
EXPORT_SYMBOL(pci_irq_get_affinity);
|
||||
|
||||
/**
|
||||
* pci_free_irq_vectors() - Free previously allocated IRQs for a device
|
||||
* @dev: the PCI device to operate on
|
||||
|
|
|
@ -854,44 +854,6 @@ int __pci_enable_msix_range(struct pci_dev *dev,
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* pci_irq_get_affinity - return the affinity of a particular MSI vector
|
||||
* @dev: PCI device to operate on
|
||||
* @nr: device-relative interrupt vector index (0-based).
|
||||
*
|
||||
* @nr has the following meanings depending on the interrupt mode:
|
||||
* MSI-X: The index in the MSI-X vector table
|
||||
* MSI: The index of the enabled MSI vectors
|
||||
* INTx: Must be 0
|
||||
*
|
||||
* Return: A cpumask pointer or NULL if @nr is out of range
|
||||
*/
|
||||
const struct cpumask *pci_irq_get_affinity(struct pci_dev *dev, int nr)
|
||||
{
|
||||
int idx, irq = pci_irq_vector(dev, nr);
|
||||
struct msi_desc *desc;
|
||||
|
||||
if (WARN_ON_ONCE(irq <= 0))
|
||||
return NULL;
|
||||
|
||||
desc = irq_get_msi_desc(irq);
|
||||
/* Non-MSI does not have the information handy */
|
||||
if (!desc)
|
||||
return cpu_possible_mask;
|
||||
|
||||
/* MSI[X] interrupts can be allocated without affinity descriptor */
|
||||
if (!desc->affinity)
|
||||
return NULL;
|
||||
|
||||
/*
|
||||
* MSI has a mask array in the descriptor.
|
||||
* MSI-X has a single mask.
|
||||
*/
|
||||
idx = dev->msi_enabled ? nr : 0;
|
||||
return &desc->affinity[idx].mask;
|
||||
}
|
||||
EXPORT_SYMBOL(pci_irq_get_affinity);
|
||||
|
||||
struct pci_dev *msi_desc_to_pci_dev(struct msi_desc *desc)
|
||||
{
|
||||
return to_pci_dev(desc->dev);
|
||||
|
|
Загрузка…
Ссылка в новой задаче