On Fri, Nov 11, 2022 at 02:54:59PM +0100, Thomas Gleixner wrote: > From: Ahmed S. Darwish <darwi@xxxxxxxxxxxxx> > > To distangle 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@xxxxxxxxxxxxx> > Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx> Acked-by: Bjorn Helgaas <bhelgaas@xxxxxxxxxx> One nit below. > --- > drivers/pci/msi/api.c | 43 +++++++++++++++++++++++++++++++++++++++++++ > drivers/pci/msi/msi.c | 38 -------------------------------------- > 2 files changed, 43 insertions(+), 38 deletions(-) > --- > diff --git a/drivers/pci/msi/api.c b/drivers/pci/msi/api.c > index 653a61868ae6..473df7ba0584 100644 > --- a/drivers/pci/msi/api.c > +++ b/drivers/pci/msi/api.c > @@ -9,6 +9,7 @@ > */ > > #include <linux/export.h> > +#include <linux/irq.h> > > #include "msi.h" > > @@ -251,6 +252,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. s/ids/IDs/ > + */ > +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 > * > diff --git a/drivers/pci/msi/msi.c b/drivers/pci/msi/msi.c > index 6fa90d07d2e4..d78646d1c116 100644 > --- a/drivers/pci/msi/msi.c > +++ b/drivers/pci/msi/msi.c > @@ -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); >