On Wed, Nov 16, 2022 at 11:32:15PM +0100, Thomas Gleixner wrote: > On Wed, Nov 16 2022 at 14:36, Jason Gunthorpe wrote: > > On Fri, Nov 11, 2022 at 02:56:50PM +0100, Thomas Gleixner wrote: > >> To support multiple MSI interrupt domains per device it is necessary to > >> segment the xarray MSI descriptor storage. Each domain gets up to > >> MSI_MAX_INDEX entries. > > > > This kinds of suggests that the new per-device MSI domains should hold > > this storage instead of per-device xarray? > > No, really not. This would create random storage in random driver places > instead of having a central storage place which is managed by the core > code. We've had that back in the days when every architecture had it's > own magic place to store and manage interrupt descriptors. Seen that, > mopped it up and never want to go back. I don't mean shift it into the msi_domain driver logic, I just mean stick an xarray in the struct msi_domain that the core code, and only the core code, manages. But I suppose, on reflection, the strong reason not to do this is that the msi_descriptor array is per-device, and while it would work OK with per-device msi_domains we still have the legacy of global msi domains and thus still need a per-device place to store the global msi domain's per-device descriptors. > > At least, I'd like to understand a bit better the motivation for using > > a domain ID instead of a pointer. > > The main motivation was to avoid device specific storage for the irq > domain pointers. It would have started with PCI/MSI[X]: I'd had to add a > irqdomain pointer to struct pci_dev and then have the PCI core care > about it. So we'd add that to everything and the world which utilizes > per device MSI domains which is quite a few places outside of PCI in the > ARM64 world and growing. I was thinking more that the "default" domain (eg the domain ID 0 as this series has it) would remain as a domain pointer in the device data as it is here, but any secondary domains would be handled with a pointer that the driver owns. You could have as many secondary domains as is required this way. Few drivers would ever use a secondary domain, so it not really a big deal for them to hold the pointer lifetime. > So what are you concerned about? Mostly API clarity, I find it very un-kernly to swap a clear pointer for an ID #. We loose typing, the APIs become less clear and we now have to worry about ID allocation policy if we ever need more than 2. Thanks, Jason