From: Jonathan Cameron <Jonathan.Cameron@Huawei.com>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: "Lukas Wunner" <lukas@wunner.de>,
"Bjorn Helgaas" <helgaas@kernel.org>,
linuxarm@huawei.com, "Mahesh J Salgaonkar" <mahesh@linux.ibm.com>,
"Bjorn Helgaas" <bhelgaas@google.com>,
linux-cxl@vger.kernel.org, linux-pci@vger.kernel.org,
"Davidlohr Bueso" <dave@stgolabs.net>,
"Dave Jiang" <dave.jiang@intel.com>,
"Alison Schofield" <alison.schofield@intel.com>,
"Vishal Verma" <vishal.l.verma@intel.com>,
"Ira Weiny" <ira.weiny@intel.com>,
"Dan Williams" <dan.j.williams@intel.com>,
"Will Deacon" <will@kernel.org>,
"Mark Rutland" <mark.rutland@arm.com>,
"Lorenzo Pieralisi" <lpieralisi@kernel.org>,
terry.bowman@amd.com,
"Kuppuswamy Sathyanarayanan"
<sathyanarayanan.kuppuswamy@linux.intel.com>,
"Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
Subject: Re: [RFC PATCH 0/9] pci: portdrv: Add auxiliary bus and register CXL PMUs (and aer)
Date: Thu, 5 Sep 2024 12:23:42 +0100 [thread overview]
Message-ID: <20240905122342.000001be@Huawei.com> (raw)
In-Reply-To: <87plpsbbe5.ffs@tglx>
Hi Thomas,
One quick follow up question below.
>
> So looking at the ASCII art of the cover letter:
>
> _____________ __ ________ __________
> | Port | | creates | | |
> | PCI Dev | |--------->| CPMU A | |
> |_____________| | |________| |
> |portdrv binds | | perf/cxlpmu binds |
> |________________| |___________________|
> \
> \
> \ ________ __________
> \ | | |
> ------>| CPMU B | |
> |________| |
> | perf/cxlpmu binds |
> |___________________|
>
> AND
>
> _____________ __
> | Type 3 | | creates ________ _________
> | PCI Dev | |--------------------------------------->| | |
> |_____________| | | CPMU C | |
> | cxl_pci binds | |________| |
> |________________| | perf/cxpmu binds |
> |__________________|
>
> If I understand it correctly then both the portdrv and the cxl_pci
> drivers create a "bus". The CPMU devices are attached to these buses.
>
> So we are talking about distinctly different devices with the twist that
> these devices somehow need to utilize the MSI/X (forget MSI) facility of
> the device which creates the bus.
>
> From the devres perspective we look at separate devices and that's what
> the interrupt code expects too. This reminds me of the lengthy
> discussion we had about IMS a couple of years ago.
>
> https://lore.kernel.org/all/87bljg7u4f.fsf@nanos.tec.linutronix.de/
>
> My view on that issue was wrong because the Intel people described the
> problem wrong. But the above pretty much begs for a proper separation
> and hierarchical design because you provide an actual bus and distinct
> devices. Reusing the ASCII art from that old thread for the second case,
> but it's probably the same for the first one:
>
> ]-------------------------------------------|
> | PCI device |
> ]-------------------| |
> | Physical function | |
> ]-------------------| |
> ]-------------------|----------| |
> | Control block for subdevices | |
> ]------------------------------| |
> | | <- "Subdevice BUS" |
> | | |
> | |-- Subddevice 0 |
> | |-- Subddevice 1 |
> | |-- ... |
> | |-- Subddevice N |
> ]-------------------------------------------|
>
> 1) cxl_pci driver binds to the PCI device.
>
> 2) cxl_pci driver creates AUXbus
>
> 3) Bus enumerates devices on AUXbus
>
> 4) Drivers bind to the AUXbus devices
>
> So you have a clear provider consumer relationship. Whether the
> subdevice utilizes resources of the PCI device or not is a hardware
> implementation detail.
>
> The important aspect is that you want to associate the subdevice
> resources to the subdevice instances and not to the PCI device which
> provides them.
>
> Let me focus on interrupts, but it's probably the same for everything
> else which is shared.
>
> Look at how the PCI device manages interrupts with the per device MSI
> mechanism. Forget doing this with either one of the legacy mechanisms.
>
> 1) It creates a hierarchical interrupt domain and gets the required
> resources from the provided parent domain. The PCI side does not
> care whether this is x86 or arm64 and it neither cares whether the
> parent domain does remapping or not. The only way it cares is about
> the features supported by the different parent domains (think
> multi-MSI).
>
> 2) Driver side allocations go through the per device domain
>
> That AUXbus is not any different. When the CPMU driver binds it wants to
> allocate interrupts. So instead of having a convoluted construct
> reaching into the parent PCI device, you simply can do:
>
> 1) Let the cxl_pci driver create a MSI parent domain and set that in
> the subdevice::msi::irqdomain pointer.
>
> 2) Provide cxl_aux_bus_create_irqdomain() which allows the CPMU device
> driver to create a per device interrupt domain.
>
> 3) Let the CPMU driver create its per device interrupt domain with
> the provided parent domain
>
> 4) Let the CPMU driver allocate its MSI-X interrupts through the per
> device domain
>
> Now on the cxl_pci side the AUXbus parent interrupt domain allocation
> function does:
>
> if (!pci_msix_enabled(pdev))
> return pci_msix_enable_and_alloc_irq_at(pdev, ....);
> else
> return pci_msix_alloc_irq_at(pdev, ....);
Hi Thomas,
I'm struggling to follow this suggestion
Would you expect the cxl_pci MSI parent domain to set it's parent as
msi_domain = irq_domain_create_hierarchy(dev_get_msi_domain(&pdev->dev),
IRQ_DOMAIN_FLAG_MSI_PARENT,
...
which seems to cause a problem with deadlocks in __irq_domain_alloc_irqs()
or create a separate domain structure and provide callbacks that reach into
the parent domain as necessary?
Or do I have this entirely wrong? I'm struggling to relate what existing
code like PCI does to what I need to do here.
Jonathan
next prev parent reply other threads:[~2024-09-05 11:23 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-29 16:40 [RFC PATCH 0/9] pci: portdrv: Add auxiliary bus and register CXL PMUs (and aer) Jonathan Cameron
2024-05-29 16:40 ` [RFC PATCH 1/9] pci: pcie: Drop priv_data from struct pcie_device and use dev_get/set_drvdata() instead Jonathan Cameron
2024-05-30 1:06 ` kernel test robot
2024-05-29 16:40 ` [RFC PATCH 2/9] pci: portdrv: Drop driver field for port type Jonathan Cameron
2024-05-29 16:40 ` [RFC PATCH 3/9] pci: pcie: portdrv: Use managed device handling to simplify error and remove flows Jonathan Cameron
2024-05-29 16:40 ` [RFC PATCH 4/9] auxiliary_bus: expose auxiliary_bus_type Jonathan Cameron
2024-05-29 16:40 ` [RFC PATCH 5/9] pci: pcie: portdrv: Add a auxiliary_bus Jonathan Cameron
2024-05-30 0:03 ` kernel test robot
2024-05-30 1:17 ` kernel test robot
2024-05-29 16:41 ` [RFC PATCH 6/9] cxl: Move CPMU register definitions to header Jonathan Cameron
2024-05-29 16:41 ` [RFC PATCH 7/9] pci: pcie/cxl: Register an auxiliary device for each CPMU instance Jonathan Cameron
2024-05-29 16:41 ` [RFC PATCH 8/9] perf: cxl: Make the cpmu driver also work with auxiliary_devices Jonathan Cameron
2024-05-29 16:41 ` [RFC PATCH 9/9] pci: pcie: portdrv: aer: Switch to auxiliary_bus Jonathan Cameron
2024-06-01 16:44 ` kernel test robot
2024-06-05 18:04 ` [RFC PATCH 0/9] pci: portdrv: Add auxiliary bus and register CXL PMUs (and aer) Bjorn Helgaas
2024-06-05 19:44 ` Jonathan Cameron
2024-06-06 12:57 ` Jonathan Cameron
2024-06-06 13:21 ` Lukas Wunner
2024-08-23 11:05 ` Jonathan Cameron
2024-08-28 21:11 ` Thomas Gleixner
2024-08-29 12:17 ` Jonathan Cameron
2024-09-05 11:23 ` Jonathan Cameron [this message]
2024-09-06 10:11 ` Thomas Gleixner
2024-09-06 17:18 ` Jonathan Cameron
2024-09-10 16:47 ` Jonathan Cameron
2024-09-10 17:37 ` Jonathan Cameron
2024-09-10 20:04 ` Thomas Gleixner
2024-09-12 16:37 ` Jonathan Cameron
2024-09-12 17:34 ` Jonathan Cameron
2024-09-13 16:24 ` Thomas Gleixner
2024-06-17 7:03 ` Ilpo Järvinen
2024-07-04 16:14 ` Jonathan Cameron
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=20240905122342.000001be@Huawei.com \
--to=jonathan.cameron@huawei.com \
--cc=alison.schofield@intel.com \
--cc=bhelgaas@google.com \
--cc=dan.j.williams@intel.com \
--cc=dave.jiang@intel.com \
--cc=dave@stgolabs.net \
--cc=helgaas@kernel.org \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=ira.weiny@intel.com \
--cc=linux-cxl@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linuxarm@huawei.com \
--cc=lpieralisi@kernel.org \
--cc=lukas@wunner.de \
--cc=mahesh@linux.ibm.com \
--cc=mark.rutland@arm.com \
--cc=sathyanarayanan.kuppuswamy@linux.intel.com \
--cc=terry.bowman@amd.com \
--cc=tglx@linutronix.de \
--cc=vishal.l.verma@intel.com \
--cc=will@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.