From: Thomas Gleixner <tglx@linutronix.de>
To: Jason Gunthorpe <jgg@nvidia.com>
Cc: LKML <linux-kernel@vger.kernel.org>,
x86@kernel.org, Joerg Roedel <joro@8bytes.org>,
Will Deacon <will@kernel.org>,
linux-pci@vger.kernel.org, Bjorn Helgaas <bhelgaas@google.com>,
Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
Marc Zyngier <maz@kernel.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Dave Jiang <dave.jiang@intel.com>,
Alex Williamson <alex.williamson@redhat.com>,
Kevin Tian <kevin.tian@intel.com>,
Dan Williams <dan.j.williams@intel.com>,
Logan Gunthorpe <logang@deltatee.com>,
Ashok Raj <ashok.raj@intel.com>, Jon Mason <jdmason@kudzu.us>,
Allen Hubbe <allenbh@gmail.com>,
"Ahmed S. Darwish" <darwi@linutronix.de>,
Reinette Chatre <reinette.chatre@intel.com>
Subject: Re: [patch 08/20] genirq/msi: Make MSI descriptor iterators device domain aware
Date: Wed, 16 Nov 2022 23:32:15 +0100 [thread overview]
Message-ID: <87wn7uo7io.ffs@tglx> (raw)
In-Reply-To: <Y3UtlTwIka6n0RuT@nvidia.com>
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 suppose the reason to avoid this is because alot of the driver
> facing API is now built on vector index numbers that index this
> xarray?
That's one aspect, but as I demonstrate later even for the IMS domains
which do not have a real requirement for 'index' you still need to have
a place to store the MSI descriptor and allocate storage space for it.
I really don't want to have random places doing that because then I
can't provide implicit MSI descriptor management, e.g. automatic
alloc/free anymore and everything has to happen at the driver side. The
only reason why I still need to do that for PCI/MSI is to be able to
support the museum architectures which still depend on the arch_....()
interfaces from 20 years ago.
So if a IMS domain, which e.g. stores the MSI message in queue memory,
wants a new interrupt then it allocates it with MSI_ANY_INDEX, which
gives it the next free slot in the XARRAY section of the MSI domain.
This avoids having IDA, bitmap allocators or whatever at the driver side
and having a virtual index number to track things does not affect the
flexibility of the driver side in any way.
All the driver needs at the very end is the interrupt number and the
message itself.
> But on the other hand can we just say drivers using multiple domains
> are "new" and they should use some new style pointer based interface
> so we don't have to have arrays of things?
Then driver writers have to provide storage for the domain pointer and
care about teardown etc. Seriously? NO!
> 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.
The msi_device_data struct which is allocated on demand for MSI usage is
the obvious point to store _and_ manage these things, i.e. managed
teardown etc.
Giving this up makes any change to the core code hard because you have
to chase all usage sites and mop them up. Just look at the ARM part of
this series which is by now 40+ patches just to mop up the irqchip
core. There are still 25 PCI/MSI global irqdomain left.
> It feels like we are baking in several hard coded limits with this
> choice
Which ones?
The chosen array section size per domain is arbitrary and can be changed
at any given time. Though you have to exhaust 64k vectors per domain
first before we start debating that.
The number of irqdomains is not really hard limited either. It's trivial
enough to extend that number and once we hit 32 we just can stash them
away in the xarray. I pondered to do that right away, but that wastes
too much memory for now.
It really does not matter whether the domain creation results in a
number or in a pointer. Pointers are required for the inner workings of
the domain hierarchy but absolutely uninteresting for endpoint domains.
All you need there is a conveniant way to create the domain and then
allocate/free interrupts as you see fit.
We agreed a year ago that we want to abstract most of these things away
for driver writers and that all they need is simple way to create the
domains and the corresponding interrupt chip is mostly about writing the
MSI message to implementation defined storage and eventually providing a
implementation specific mask/unmask operation.
So what are you concerned about?
Thanks,
tglx
next prev parent reply other threads:[~2022-11-16 22:32 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20221111131813.914374272@linutronix.de>
2022-11-11 13:56 ` [patch 01/20] genirq/msi: Move IRQ_DOMAIN_MSI_NOMASK_QUIRK to MSI flags Thomas Gleixner
2022-11-16 18:14 ` Jason Gunthorpe
2022-11-11 13:56 ` [patch 02/20] genirq/irqdomain: Rename irq_domain::dev to irq_domain::pm_dev Thomas Gleixner
2022-11-16 18:22 ` Jason Gunthorpe
2022-11-17 15:56 ` Thomas Gleixner
2022-11-11 13:56 ` [patch 03/20] genirq/msi: Create msi_api.h Thomas Gleixner
2022-11-16 18:23 ` Jason Gunthorpe
2022-11-11 13:56 ` [patch 04/20] genirq/irqdomain: Provide IRQ_DOMAIN_FLAG_MSI_PARENT Thomas Gleixner
2022-11-18 7:44 ` Tian, Kevin
2022-11-11 13:56 ` [patch 05/20] genirq/irqdomain: Provide IRQ_DOMAIN_FLAG_MSI_DEVICE Thomas Gleixner
2022-11-11 13:56 ` [patch 06/20] genirq/msi: Check for invalid MSI parent domain usage Thomas Gleixner
2022-11-18 7:50 ` Tian, Kevin
2022-11-18 12:15 ` Thomas Gleixner
2022-11-11 13:56 ` [patch 07/20] genirq/msi: Add pointers for per device irq domains Thomas Gleixner
2022-11-11 13:56 ` [patch 08/20] genirq/msi: Make MSI descriptor iterators device domain aware Thomas Gleixner
2022-11-16 18:36 ` Jason Gunthorpe
2022-11-16 22:32 ` Thomas Gleixner [this message]
2022-11-17 0:37 ` Jason Gunthorpe
2022-11-17 8:45 ` Thomas Gleixner
2022-11-18 7:57 ` Tian, Kevin
2022-11-18 12:17 ` Thomas Gleixner
2022-11-11 13:56 ` [patch 09/20] genirq/msi: Make msi_get_virq() " Thomas Gleixner
2022-11-13 10:37 ` [patch V1A " Thomas Gleixner
2022-11-11 13:56 ` [patch 10/20] genirq/msi: Rename msi_add_msi_desc() to msi_insert_msi_desc() Thomas Gleixner
2022-11-16 18:36 ` Jason Gunthorpe
2022-11-11 13:56 ` [patch 11/20] genirq/msi: Make descriptor allocation device domain aware Thomas Gleixner
2022-11-18 8:10 ` Tian, Kevin
2022-11-18 12:19 ` Thomas Gleixner
2022-11-11 13:56 ` [patch 12/20] genirq/msi: Make descriptor freeing " Thomas Gleixner
2022-11-18 8:17 ` Tian, Kevin
2022-11-18 12:22 ` Thomas Gleixner
2022-11-18 13:10 ` Thomas Gleixner
2022-11-11 13:56 ` [patch 13/20] genirq/msi: Make msi_add_simple_msi_descs() device " Thomas Gleixner
2022-11-18 8:20 ` Tian, Kevin
2022-11-11 13:56 ` [patch 14/20] genirq/msi: Provide new domain id based interfaces for freeing interrupts Thomas Gleixner
2022-11-18 8:30 ` Tian, Kevin
2022-11-11 13:57 ` [patch 15/20] genirq/msi: Provide new domain id allocation functions Thomas Gleixner
2022-11-18 8:43 ` Tian, Kevin
2022-11-18 12:26 ` Thomas Gleixner
2022-11-21 3:26 ` Tian, Kevin
2022-11-11 13:57 ` [patch 16/20] PCI/MSI: Use msi_domain_alloc/free_irqs_all_locked() Thomas Gleixner
2022-11-14 17:13 ` Bjorn Helgaas
2022-11-11 13:57 ` [patch 17/20] platform-msi: Switch to the domain id aware MSI interfaces Thomas Gleixner
2022-11-18 8:53 ` Tian, Kevin
2022-11-18 12:26 ` Thomas Gleixner
2022-11-21 3:42 ` Tian, Kevin
2022-11-21 10:34 ` Thomas Gleixner
2022-11-11 13:57 ` [patch 18/20] bus: fsl-mc-msi: Switch to domain id aware interfaces Thomas Gleixner
2022-11-11 13:57 ` [patch 19/20] oc: ti: ti_sci_inta_msi: Switch to domain id aware MSI functions Thomas Gleixner
2022-11-11 13:57 ` [patch 20/20] genirq/msi: Remove unused alloc/free interfaces Thomas Gleixner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87wn7uo7io.ffs@tglx \
--to=tglx@linutronix.de \
--cc=alex.williamson@redhat.com \
--cc=allenbh@gmail.com \
--cc=ashok.raj@intel.com \
--cc=bhelgaas@google.com \
--cc=dan.j.williams@intel.com \
--cc=darwi@linutronix.de \
--cc=dave.jiang@intel.com \
--cc=gregkh@linuxfoundation.org \
--cc=jdmason@kudzu.us \
--cc=jgg@nvidia.com \
--cc=joro@8bytes.org \
--cc=kevin.tian@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=logang@deltatee.com \
--cc=lorenzo.pieralisi@arm.com \
--cc=maz@kernel.org \
--cc=reinette.chatre@intel.com \
--cc=will@kernel.org \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).