]> git.baikalelectronics.ru Git - kernel.git/commit
irqchip/gic-v3-its: Fix MSI alias accounting
authorRobin Murphy <robin.murphy@arm.com>
Wed, 31 May 2017 17:52:27 +0000 (18:52 +0100)
committerMarc Zyngier <marc.zyngier@arm.com>
Thu, 22 Jun 2017 13:13:26 +0000 (14:13 +0100)
commitb8d39c925c65d42789578e475dc7ffcc22a88cdb
treec9d5830c58c3ebd68fad23e6773e0b8407ac8e71
parent0e8f61ea082f237b6a8e085b4f30e68abae3d28f
irqchip/gic-v3-its: Fix MSI alias accounting

The call to pci_for_each_dma_alias() in the ITS PCI code has aroused
suspicion in the past, and upon closer inspection does turn out to be
completely backwards. Rather than iterating through each RID alias of
the given device, what we actually want to be doing here is iterating
through all the *other* devices which may also alias the same RID, in
order to size the table for the worst case.

Do the right thing by ignoring the initial DMA aliases themselves and
just using that walk to detect an aliasing bridge, then walking back
down the bus topology as necessary to actually count everything else.

Our alias handling still isn't perfect, since we don't account for the
cases of certain bridges only taking ownership of transactions under
particular circumstances, but without completely reworking the ITS code
to cope with the notion of multiple DevIDs per device, it'll have to do.

Signed-off-by: Robin Murphy <robin.murphy@arm.com>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
drivers/irqchip/irq-gic-v3-its-pci-msi.c