PCI/MSI: Fix pci_irq_vector()/pci_irq_get_affinity()
authorThomas Gleixner <tglx@linutronix.de>
Mon, 6 Dec 2021 22:27:26 +0000 (23:27 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 27 Jan 2022 10:04:11 +0000 (11:04 +0100)
commitdb3e0d59f1c88db975a15c6f461208ba541ec5f0
tree3c110c16adbd34c68b9b1651b06edc4c38817886
parent1526f0ae4949491247a66ff5cc15149fc4c4ff92
PCI/MSI: Fix pci_irq_vector()/pci_irq_get_affinity()

[ Upstream commit 29bbc35e29d9b6347780dcacde2deb4b39344167 ]

pci_irq_vector() and pci_irq_get_affinity() use the list position to find the
MSI-X descriptor at a given index. That's correct for the normal case where
the entry number is the same as the list position.

But it's wrong for cases where MSI-X was allocated with an entries array
describing sparse entry numbers into the hardware message descriptor
table. That's inconsistent at best.

Make it always check the entry number because that's what the zero base
index really means. This change won't break existing users which use a
sparse entries array for allocation because these users retrieve the Linux
interrupt number from the entries array after allocation and none of them
uses pci_irq_vector() or pci_irq_get_affinity().

Fixes: aff171641d18 ("PCI: Provide sensible IRQ vector alloc/free routines")
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
Link: https://lore.kernel.org/r/20211206210223.929792157@linutronix.de
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/pci/msi.c