Re: [Patch V2 07/13] irqdomain/msi: Provide msi_alloc/free_store() callbacks

From: Thomas Gleixner
Date: Thu Mar 25 2021 - 14:45:47 EST


On Thu, Mar 25 2021 at 17:08, Marc Zyngier wrote:
> Megha Dey <megha.dey@xxxxxxxxx> wrote:
>> @@ -434,6 +434,12 @@ int __msi_domain_alloc_irqs(struct irq_domain *domain, struct device *dev,
>> if (ret)
>> return ret;
>>
>> + if (ops->msi_alloc_store) {
>> + ret = ops->msi_alloc_store(domain, dev, nvec);
>
> What is supposed to happen if we get aliasing devices (similar to what
> we have with devices behind a PCI bridge)?
>
> The ITS code goes through all kind of hoops to try and detect this
> case when sizing the translation tables (in the .prepare callback),
> and I have the feeling that sizing the message store is analogous.

No. The message store itself is sized upfront by the underlying 'master'
device. Each 'master' device has it's own irqdomain.

This is the allocation for the subdevice and this is not part of PCI and
therefore not subject to PCI aliasing.

|-----------|
| PCI dev | <- driver creates irqdomain and manages MSI
|-----------| Sizing is either fixed (hardware property)
or just managed by that irqdomain/driver
with some hardware constraints
|subdev| <- subdev gets ^^irqdomain assigned and
allocates from it.
.....
|subdev|

So this is fundamentally different from ITS because ITS has to size the
translation memory, i.e. where the MSI message is written to by the
device.

IMS just handles the storage of the message in the (sub)device. So if
that needs to be supported on ARM then the issue is not with the
subdevices, the issue is with the 'master' device, but that does not use
that alloc_store() callback as it provides it with the irqdomain it
manages.

Thanks,

tglx