From: Jason Gunthorpe via iommu <iommu@lists.linux-foundation.org>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: Allen Hubbe <allenbh@gmail.com>,
linux-s390@vger.kernel.org, Kevin Tian <kevin.tian@intel.com>,
x86@kernel.org, Dave Jiang <dave.jiang@intel.com>,
Ashok Raj <ashok.raj@intel.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Marc Zygnier <maz@kernel.org>, Heiko Carstens <hca@linux.ibm.com>,
LKML <linux-kernel@vger.kernel.org>,
iommu@lists.linux-foundation.org,
Christian Borntraeger <borntraeger@de.ibm.com>,
Alex Williamson <alex.williamson@redhat.com>,
Joerg Roedel <jroedel@suse.de>,
Bjorn Helgaas <helgaas@kernel.org>,
Kalle Valo <kvalo@codeaurora.org>,
linux-pci@vger.kernel.org, linux-ntb@googlegroups.com,
Logan Gunthorpe <logang@deltatee.com>,
Megha Dey <megha.dey@intel.com>
Subject: Re: [patch 21/32] NTB/msi: Convert to msi_on_each_desc()
Date: Mon, 6 Dec 2021 10:43:44 -0400 [thread overview]
Message-ID: <20211206144344.GA4670@nvidia.com> (raw)
In-Reply-To: <87o85v3znb.ffs@tglx>
On Sun, Dec 05, 2021 at 03:16:40PM +0100, Thomas Gleixner wrote:
> On Sat, Dec 04 2021 at 15:20, Thomas Gleixner wrote:
> > On Fri, Dec 03 2021 at 12:41, Jason Gunthorpe wrote:
> > So I need to break that up in a way which caters for both cases, but
> > does neither create a special case for PCI nor for the rest of the
> > universe, i.e. the 1:1 case has to be a subset of the 1:2 case which
> > means all of it is common case. With that solved the storage question
> > becomes a nobrainer.
> >
> > When I looked at it again yesterday while writing mail, I went back to
> > my notes and found the loose ends where I left off. Let me go back and
> > start over from there.
>
> I found out why I stopped looking at it. I came from a similar point of
> view what you were suggesting:
>
> >> If IMS == MSI, then couldn't we conceptually have the dev->irqdomain
> >> completely unable to handle IMS/MSI/MSI-X at all, and instead, when
> >> the driver asks for PCI MSI access we create a new hierarchical
> >> irqdomain and link it to a MSI chip_ops or a MSI-X chip_ops - just as
> >> you outlined for IMS? (again, not saying to do this, but let's ask if
> >> that makes more sense than the current configuration)
>
> Which I shot down with:
>
> > That's not really a good idea because dev->irqdomain is a generic
> > mechanism and not restricted to the PCI use case. Special casing it for
> > PCI is just wrong. Special casing it for all use cases just to please
> > PCI is equally wrong. There is a world outside of PCI and x86.
>
> That argument is actually only partially correct.
I'm not sure I understood your reply? I think we are both agreeing
that dev->irqdomain wants to be a generic mechanism?
I'd say that today we've special cased it to handle PCI. IMHO that is
exactly what pci_msi_create_irq_domain() is doing - it replaces the
chip ops with ops that can *ONLY* do PCI MSI and so dev->irqdomain
becomes PCI only and non-generic.
> After studying my notes and some more code (sigh), it looks feasible
> under certain assumptions, constraints and consequences.
>
> Assumptions:
>
> 1) The irqdomain pointer of PCI devices which is set up during device
> discovery is not used by anything else than infrastructure which
> knows how to handle it.
>
> Of course there is no guarantee, but I'm not that horrified about
> it anymore after chasing the exposure with yet more coccinelle
> scripts.
OK
> Constraints:
>
> 1) This is strictly opt-in and depends on hierarchical irqdomains.
OK
> That means that devices which depend on IMS won't work on anything
> which is not up to date.
OK - I think any pressure to get platforms to update their code is
only positive.
> 2) Guest support is strictly opt-in
>
> The underlying architecture/subarchitecture specific irqdomain has
> to detect at setup time (eventually early boot), whether the
> underlying hypervisor supports it.
>
> The only reasonable way to support that is the availability of
> interrupt remapping via vIOMMU, as we discussed before.
This is talking about IMS specifically because of the legacy issue
where the MSI addr/data pair inside a guest is often completely fake?
> 4) The resulting irqdomain hierarchy would ideally look like this:
>
> VECTOR -> [IOMMU, ROUTING, ...] -> PCI/[MSI/MSI-X/IMS] domains
OK, this matches where I have come from as well
> That does not work in all cases due to architecture and host
> controller constraints, so we might end up with:
>
> VECTOR -> IOMMU -> SHIM -> PCI/[MSI/MSI-X/IMS] domains
OK - I dont' know enough about the architecture/controller details to
imagine what SHIM is, but if it allows keeping the PCI code as purely
PCI code, then great
> 5) The design rules for the device specific IMS irqdomains have to be
> documented and enforced to the extent possible.
>
> Rules which I have in my notes as of today:
>
> - The device specific IMS irq chip / irqdomain has to be strictly
> separated from the rest of the driver code and can only
> interact via the irq chip data which is either per interrupt or
> per device.
It seems OK with the observaion that IDXD and mlx5 will both need to
set 'per-interrupt' data before provisioning the IRQ
> I have some ideas how to enforce these things to go into
> drivers/irqchip/ so they are exposed to scrutiny and not
> burried in some "my device is special" driver code and applied
> by subsystem maintainers before anyone can even look at it.
Means more modules, but OK
> - The irqchip callbacks which can be implemented by these top
> level domains are going to be restricted.
OK - I think it is great that the driver will see a special ops struct
that is 'ops for device's MSI addr/data pair storage'. It makes it
really clear what it is
> - For the irqchip callbacks which are allowed/required the rules
> vs. following down the hierarchy need to be defined and
> enforced.
The driver should be the ultimate origin of the interrupt so it is
always end-point in the hierarchy, opposite the CPU?
I would hope the driver doesn't have an exposure to hierarchy?
> - To achieve that the registration interface will not be based on
> struct irq_chip. This will be a new representation and the core
> will convert that into a proper irq chip which fits into the
> hierarchy. This provides one central place where the hierarchy
> requirements can be handled as they depend on the underlying
> MSI domain (IOMMU, SHIM, etc.). Otherwise any change on that
> would require to chase the IMS irqchips all over the place.
OK, I like this too.
So we have a new concept: 'device MSI storage ops'
Put them along with the xarray holding the msi_descs and you've got my
msi_table :)
> 2) The device centric storage concept will stay as it does not make
> any sense to push it towards drivers and what's worse it would be a
> major pain vs. the not yet up to the task irqdomains and the legacy
> architecture backends to change that. I really have no interrest to
> make the legacy code
>
> It also makes sense because the interrupts are strictly tied to the
> device. They cannot originate from some disconnected layer of thin
> air.
>
> Sorry Jason, no tables for you. :)
How does the driver select with 'device MSI storage ops' it is
requesting a MSI for ?
> 1) I'm going to post part 1-3 of the series once more with the fallout
> and review comments addressed.
OK, I didn't see anything in there that was making anything harder in
this direction
> 5) Implement an IMS user.
>
> The obvious candidate which should be halfways accessible is the
> ath11 PCI driver which falls into that category.
Aiiee:
drivers/net/wireless/ath/ath11k/pci.c: ab_pci->msi_ep_base_data = msi_desc->msg.data;
So, we already have two in-tree PCI IMS devices!!
Agree this makes a lot of sense to focus on some first steps
Along with NTB which is in the same general camp
Thanksm
Jason
_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu
next prev parent reply other threads:[~2021-12-06 14:43 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20211126230957.239391799@linutronix.de>
[not found] ` <20211126232735.547996838@linutronix.de>
[not found] ` <7daba0e2-73a3-4980-c3a5-a71f6b597b22@deltatee.com>
[not found] ` <874k7ueldt.ffs@tglx>
[not found] ` <6ba084d6-2b26-7c86-4526-8fcd3d921dfd@deltatee.com>
[not found] ` <87ilwacwp8.ffs@tglx>
[not found] ` <d6f13729-1b83-fa7d-3f0d-98d4e3f7a2aa@deltatee.com>
[not found] ` <87v909bf2k.ffs@tglx>
[not found] ` <20211130202800.GE4670@nvidia.com>
[not found] ` <87o861banv.ffs@tglx>
[not found] ` <20211201001748.GF4670@nvidia.com>
2021-12-01 10:16 ` [patch 21/32] NTB/msi: Convert to msi_on_each_desc() Thomas Gleixner
2021-12-01 13:00 ` Jason Gunthorpe via iommu
2021-12-01 17:35 ` Thomas Gleixner
2021-12-01 18:14 ` Jason Gunthorpe via iommu
2021-12-01 18:46 ` Logan Gunthorpe
2021-12-01 20:21 ` Thomas Gleixner
2021-12-02 0:01 ` Thomas Gleixner
2021-12-02 13:55 ` Jason Gunthorpe via iommu
2021-12-02 14:23 ` Greg Kroah-Hartman
2021-12-02 14:45 ` Jason Gunthorpe via iommu
2021-12-02 19:25 ` Thomas Gleixner
2021-12-02 20:00 ` Jason Gunthorpe via iommu
2021-12-02 22:31 ` Thomas Gleixner
2021-12-03 0:37 ` Jason Gunthorpe via iommu
2021-12-03 15:07 ` Thomas Gleixner
2021-12-03 16:41 ` Jason Gunthorpe via iommu
2021-12-04 14:20 ` Thomas Gleixner
2021-12-05 14:16 ` Thomas Gleixner
2021-12-06 14:43 ` Jason Gunthorpe via iommu [this message]
2021-12-06 15:47 ` Thomas Gleixner
2021-12-06 17:00 ` Jason Gunthorpe via iommu
2021-12-06 20:28 ` Thomas Gleixner
2021-12-06 21:06 ` Jason Gunthorpe via iommu
2021-12-06 22:21 ` Thomas Gleixner
2021-12-06 14:19 ` Jason Gunthorpe via iommu
2021-12-06 15:06 ` Thomas Gleixner
2021-12-09 6:26 ` Tian, Kevin
2021-12-09 9:03 ` Thomas Gleixner
2021-12-09 12:17 ` Tian, Kevin
2021-12-09 15:57 ` Thomas Gleixner
2021-12-10 7:37 ` Tian, Kevin
2021-12-09 5:41 ` Tian, Kevin
2021-12-09 5:47 ` Jason Wang
2021-12-01 16:28 ` Dave Jiang
2021-12-01 18:41 ` Thomas Gleixner
2021-12-01 18:47 ` Dave Jiang
2021-12-01 20:25 ` Thomas Gleixner
2021-12-01 21:21 ` Dave Jiang
2021-12-01 21:44 ` Thomas Gleixner
2021-12-01 21:49 ` Dave Jiang
2021-12-01 22:03 ` Thomas Gleixner
2021-12-01 22:53 ` Dave Jiang
2021-12-01 23:57 ` Thomas Gleixner
2021-12-09 5:23 ` Tian, Kevin
2021-12-09 8:37 ` Thomas Gleixner
2021-12-09 12:31 ` Tian, Kevin
2021-12-09 16:21 ` Jason Gunthorpe via iommu
2021-12-09 20:32 ` Thomas Gleixner
2021-12-09 20:58 ` Jason Gunthorpe via iommu
2021-12-09 22:09 ` Thomas Gleixner
2021-12-10 0:26 ` Thomas Gleixner
2021-12-10 7:29 ` Tian, Kevin
2021-12-10 12:13 ` Thomas Gleixner
2021-12-11 8:06 ` Tian, Kevin
2021-12-10 12:39 ` Jason Gunthorpe via iommu
2021-12-10 19:00 ` Thomas Gleixner
2021-12-11 7:44 ` Tian, Kevin
2021-12-11 13:04 ` Thomas Gleixner
2021-12-12 1:56 ` Tian, Kevin
2021-12-12 20:55 ` Thomas Gleixner
2021-12-12 23:37 ` Jason Gunthorpe via iommu
2021-12-13 7:50 ` Tian, Kevin
2021-12-11 7:52 ` Tian, Kevin
2021-12-12 0:12 ` Thomas Gleixner
2021-12-12 2:14 ` Tian, Kevin
2021-12-12 20:50 ` Thomas Gleixner
2021-12-12 23:42 ` Jason Gunthorpe via iommu
2021-12-10 7:36 ` Tian, Kevin
2021-12-10 12:30 ` Jason Gunthorpe via iommu
2021-12-12 6:44 ` Mika Penttilä
2021-12-12 23:27 ` Jason Gunthorpe via iommu
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=20211206144344.GA4670@nvidia.com \
--to=iommu@lists.linux-foundation.org \
--cc=alex.williamson@redhat.com \
--cc=allenbh@gmail.com \
--cc=ashok.raj@intel.com \
--cc=borntraeger@de.ibm.com \
--cc=dave.jiang@intel.com \
--cc=gregkh@linuxfoundation.org \
--cc=hca@linux.ibm.com \
--cc=helgaas@kernel.org \
--cc=jgg@nvidia.com \
--cc=jroedel@suse.de \
--cc=kevin.tian@intel.com \
--cc=kvalo@codeaurora.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-ntb@googlegroups.com \
--cc=linux-pci@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=logang@deltatee.com \
--cc=maz@kernel.org \
--cc=megha.dey@intel.com \
--cc=tglx@linutronix.de \
--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