• Robin Murphy's avatar
    irqchip/gic-v3-its: Fix MSI alias accounting · 3403b025
    Robin Murphy authored
    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: default avatarRobin Murphy <robin.murphy@arm.com>
    Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    3403b025
irq-gic-v3-its-pci-msi.c 4.83 KB