All of lore.kernel.org
 help / color / mirror / Atom feed
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: Thu, 17 Nov 2022 09:45:02 +0100	[thread overview]
Message-ID: <87zgcqm0kx.ffs@tglx> (raw)
In-Reply-To: <Y3WCN2bAvBvbp/w5@nvidia.com>

On Wed, Nov 16 2022 at 20:37, Jason Gunthorpe wrote:
> 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.

I tried several approaches but all of them ended up having slightly
different code pathes and decided to keep everything the same from
legacy arch over global MSI and the modern per device MSI models.

Due to that some of the constructs are slightly awkward, but the
important outcome for me was that I ended up with as many shared code
pathes as possible. Having separate code pathes for all variants is for
one causing code bloat and what's worse it's a guarantee for divergance
and maintenance nightmares. As this is setup/teardown management code
and not the fancy hotpath where we really want to spare cycles, I went
for the unified model.

> 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.

I don't see an issue with that.

  id = msi_create_device_domain(dev, &template, ...);
  
is not much different from:

  ptr = msi_create_device_domain(dev, &template, ...);

But it makes a massive difference vs. encapsulation and pointer leakage.

If you have a stale ID then you can't do harm, a stale pointer very much
so.

Aside of that once pointers are available people insist on fiddling in
the guts. As I'm mopping up behind driver writers for the last twenty
years now, my confidence in them is pretty close to zero.

So I rather be defensive and work towards encapsulation where ever its
possible. Interrupts are a source of hard to debug subtle bugs, so
taking the tinkerers the tools away to cause them is a good thing IMO.

Thanks,

        tglx

  reply	other threads:[~2022-11-17  8:45 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
2022-11-17  0:37       ` Jason Gunthorpe
2022-11-17  8:45         ` Thomas Gleixner [this message]
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=87zgcqm0kx.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.