PCI/MSI: Move pci_irq_get_affinity() to api.c
authorAhmed S. Darwish <darwi@linutronix.de>
Fri, 11 Nov 2022 13:54:59 +0000 (14:54 +0100)
committerThomas Gleixner <tglx@linutronix.de>
Thu, 17 Nov 2022 14:15:21 +0000 (15:15 +0100)
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
drivers/pci/msi/api.c
drivers/pci/msi/msi.c

index 20a580b..93ddc55 100644 (file)
@@ -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.
+ */
+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
  *
index 6fa90d0..d78646d 100644 (file)
@@ -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);