PCI/MSI: Simplify pci_irq_get_affinity()
authorThomas Gleixner <tglx@linutronix.de>
Fri, 10 Dec 2021 22:19:26 +0000 (23:19 +0100)
committerThomas Gleixner <tglx@linutronix.de>
Thu, 16 Dec 2021 21:16:41 +0000 (22:16 +0100)
Replace open coded MSI descriptor chasing and use the proper accessor
functions instead.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Michael Kelley <mikelley@microsoft.com>
Tested-by: Nishanth Menon <nm@ti.com>
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Link: https://lore.kernel.org/r/20211210221814.900929381@linutronix.de
drivers/pci/msi/msi.c

index fad3873630331613a7c83c6c92d1de5c8d8a5f91..0909b27370cff6c4cf7fe769968eec0fa58daa1e 100644 (file)
@@ -1104,26 +1104,20 @@ EXPORT_SYMBOL(pci_irq_vector);
  */
 const struct cpumask *pci_irq_get_affinity(struct pci_dev *dev, int nr)
 {
-       if (dev->msix_enabled) {
-               struct msi_desc *entry;
+       int irq = pci_irq_vector(dev, nr);
+       struct msi_desc *desc;
 
-               for_each_pci_msi_entry(entry, dev) {
-                       if (entry->msi_index == nr)
-                               return &entry->affinity->mask;
-               }
-               WARN_ON_ONCE(1);
+       if (WARN_ON_ONCE(irq <= 0))
                return NULL;
-       } else if (dev->msi_enabled) {
-               struct msi_desc *entry = first_pci_msi_entry(dev);
-
-               if (WARN_ON_ONCE(!entry || !entry->affinity ||
-                                nr >= entry->nvec_used))
-                       return NULL;
 
-               return &entry->affinity[nr].mask;
-       } else {
+       desc = irq_get_msi_desc(irq);
+       /* Non-MSI does not have the information handy */
+       if (!desc)
                return cpu_possible_mask;
-       }
+
+       if (WARN_ON_ONCE(!desc->affinity))
+               return NULL;
+       return &desc->affinity[nr].mask;
 }
 EXPORT_SYMBOL(pci_irq_get_affinity);