From: Jonathan Cameron <Jonathan.Cameron@Huawei.com>
To: Bjorn Helgaas <helgaas@kernel.org>
Cc: Shuai Xue <xueshuai@linux.alibaba.com>,
Robin Murphy <robin.murphy@arm.com>, <yangyicong@huawei.com>,
<will@kernel.org>, <baolin.wang@linux.alibaba.com>,
<linux-arm-kernel@lists.infradead.org>,
<linux-kernel@vger.kernel.org>, <linux-pci@vger.kernel.org>,
<rdunlap@infradead.org>, <mark.rutland@arm.com>,
<zhuo.song@linux.alibaba.com>, <linux-cxl@vger.kernel.org>
Subject: Re: [PATCH v3 2/3] drivers/perf: add DesignWare PCIe PMU driver
Date: Wed, 17 May 2023 10:54:21 +0100 [thread overview]
Message-ID: <20230517105421.00003251@Huawei.com> (raw)
In-Reply-To: <ZGPW4JzOOUT4ksMf@bhelgaas>
On Tue, 16 May 2023 14:17:52 -0500
Bjorn Helgaas <helgaas@kernel.org> wrote:
> On Tue, May 16, 2023 at 04:03:04PM +0100, Jonathan Cameron wrote:
> >
> > PCI folks, Question below directed at you. Please take a look.
> > +CC linux-cxl because a similar question is going to bite us shortly
> > if we want CXL PMUs to work well on RP or Switch ports.
> >
> > > >> +static int dwc_pcie_ras_des_discover(struct dwc_pcie_pmu_priv *priv)
> > > >> +{
> > > >> + int index = 0;
> > > >> + struct pci_dev *pdev = NULL;
> > > >> + struct dwc_pcie_rp_info *rp_info;
> > > >> +
> > > >> + INIT_LIST_HEAD(&priv->rp_infos);
> > > >> +
> > > >> + /* Match the rootport with VSEC_RAS_DES_ID */
> > > >> + for_each_pci_dev(pdev) {
> > > >
> > > > Does the PCI layer not offer a more robust mechanism for this?
> > > > (PCI fixups come to mind, but I don't actually know whether that
> > > > would be a viable approach or not.)
> > >
> > > I am afraid not yet. Jonathan try to add a PMU service but it is
> > > not merged into mainline.
> >
> > I wouldn't read much into that 'failure'. We never persisted with
> > that driver because it was for an old generation of hardware.
> > Mostly the aim with that was to explore the area of PCIe PMU in
> > general rather than to get the support upstream. Some of the
> > counters on that hardware were too small to be of much use anyway :)
> >
> > Grabbing just relevant functions..
> >
> > Bjorn, we need to figure out a way forwards for this sort of case
> > and I'd appreciate your input on the broad brush question of 'how
> > should it be done'?
> >
> > This is a case where a PCIe port (RP here) correctly has the PCIe
> > class code so binds to the pcie_port driver, but has a VSEC (others
> > examples use DOE, or DVSEC) that provides extended functionality.
> > The referred to PCIe PMU from our older Hisilicon platforms did it
> > by adding another service driver - that probably doesn't extend
> > well.
> >
> > The approach used here is to separately walk the PCI topology and
> > register the devices. It can 'maybe' get away with that because no
> > interrupts and I assume resets have no nasty impacts on it because
> > the device is fairly simple. In general that's not going to work.
> > CXL does a similar trick (which I don't much like, but too late
> > now), but we've also run into the problem of how to get interrupts
> > if not the main driver.
>
> Yes, this is a real problem. I think the "walk all PCI devices
> looking for one we like" approach is terrible because it breaks a lot
> of driver model assumptions (no device ID to autoload module via udev,
> hotplug doesn't work, etc), but we don't have a good alternative right
> now.
>
> I think portdrv is slightly better because at least it claims the
> device in the usual way and gives a way for service drivers to
> register with it. But I don't really like that either because it
> created a new weird /sys/bus/pci_express hierarchy full of these
> sub-devices that aren't really devices, and it doesn't solve the
> module load and hotplug issues.
>
> I would like to have portdrv be completely built into the PCI core and
> not claim Root Ports or Switch Ports. Then those devices would be
> available via the usual driver model for driver loading and binding
> and for hotplug.
Let me see if I understand this correctly as I can think of a few options
that perhaps are inline with what you are thinking.
1) All the portdrv stuff converted to normal PCI core helper functions
that a driver bound to the struct pci_dev can use.
2) Driver core itself provides a bunch of extra devices alongside the
struct pci_dev one to which additional drivers can bind? - so kind
of portdrv handling, but squashed into the PCI device topology?
3) Have portdrv operated under the hood, so all the services etc that
it provides don't require a driver to be bound at all. Then
allow usual VID/DID based driver binding.
If 1 - we are going to run into class device restrictions and that will
just move where we have to handle the potential vendor specific parts.
We probably don't want that to be a hydra with all the functionality
and lookups etc driven from there, so do we end up with sub devices
of that new PCI port driver with a discover method based on either
vsec + VID or DVSEC with devices created under the main pci_dev.
That would have to include nastiness around interrupt discovery for
those sub devices. So ends up roughly like port_drv.
I don't think 2 solves anything.
For 3 - interrupts and ownership of facilities is going to be tricky
as initially those need to be owned by the PCI core (no device driver bound)
and then I guess handed off to the driver once it shows up? Maybe that
driver should call a pci_claim_port() that gives it control of everything
and pci_release_port() that hands it all back to the core. That seems
racey.
As another similar proposal to 3 (and one Greg KH will hate :) can we
do something similar to vfio and allow an unbind of a class driver followed by
a bind of a more specific one?
I think 1 is probably the easiest to implement, but it just moves
the problem.
If we had a way to reliably override the class driver if a more specific
one exists, that might work around the problem but I don't think we
can do that currently.
Jonathan
>
> Bjorn
next prev parent reply other threads:[~2023-05-17 9:54 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20220917121036.14864-1-xueshuai@linux.alibaba.com>
[not found] ` <20220917121036.14864-3-xueshuai@linux.alibaba.com>
2022-09-22 15:58 ` [PATCH v1 2/3] drivers/perf: add DesignWare PCIe PMU driver Jonathan Cameron
2022-09-22 17:32 ` Bjorn Helgaas
2022-09-23 3:35 ` Yicong Yang
2022-09-23 10:56 ` Jonathan Cameron
2022-09-23 13:45 ` Shuai Xue
2022-09-23 15:54 ` Jonathan Cameron
2022-09-26 13:31 ` Shuai Xue
2022-09-26 14:32 ` Robin Murphy
2022-09-26 17:18 ` Bjorn Helgaas
2022-09-27 5:13 ` Shuai Xue
2022-09-27 10:04 ` Jonathan Cameron
2022-09-27 10:14 ` Robin Murphy
2022-09-27 12:49 ` Shuai Xue
2022-09-27 13:39 ` Jonathan Cameron
2022-09-27 12:29 ` Shuai Xue
2022-09-27 10:03 ` Jonathan Cameron
2022-09-22 17:36 ` Bjorn Helgaas
2022-09-23 14:46 ` Shuai Xue
2022-09-23 18:51 ` Bjorn Helgaas
2022-09-27 6:01 ` Shuai Xue
2023-04-10 3:16 ` [PATCH v2 0/3] drivers/perf: add Synopsys DesignWare PCIe PMU driver support Shuai Xue
2023-04-10 3:17 ` [PATCH v2 1/3] docs: perf: Add description for Synopsys DesignWare PCIe PMU driver Shuai Xue
2023-04-10 3:17 ` [PATCH v2 2/3] drivers/perf: add " Shuai Xue
2023-04-10 7:25 ` kernel test robot
2023-04-11 3:17 ` Baolin Wang
2023-04-17 1:16 ` Shuai Xue
2023-04-18 1:51 ` Baolin Wang
2023-04-19 1:39 ` Shuai Xue
2023-04-10 3:17 ` [PATCH v2 3/3] MAINTAINERS: add maintainers for " Shuai Xue
2023-04-17 6:17 ` [PATCH v3 0/3] drivers/perf: add Synopsys DesignWare PCIe PMU driver support Shuai Xue
2023-04-17 6:17 ` [PATCH v3 1/3] docs: perf: Add description for Synopsys DesignWare PCIe PMU driver Shuai Xue
2023-05-16 14:32 ` Jonathan Cameron
2023-05-17 1:27 ` Shuai Xue
2023-04-17 6:17 ` [PATCH v3 2/3] drivers/perf: add " Shuai Xue
2023-04-18 23:30 ` Robin Murphy
2023-04-27 6:33 ` Shuai Xue
2023-05-09 2:02 ` Shuai Xue
2023-05-16 15:03 ` Jonathan Cameron
2023-05-16 19:17 ` Bjorn Helgaas
2023-05-17 9:54 ` Jonathan Cameron [this message]
2023-05-17 16:27 ` Bjorn Helgaas
2023-05-19 10:08 ` Shuai Xue
2023-04-17 6:17 ` [PATCH v3 3/3] MAINTAINERS: add maintainers for " Shuai Xue
2023-05-16 13:01 ` [PATCH v4 0/4] drivers/perf: add Synopsys DesignWare PCIe PMU driver support Shuai Xue
2023-05-16 13:01 ` [PATCH v4 1/4] docs: perf: Add description for Synopsys DesignWare PCIe PMU driver Shuai Xue
2023-05-16 13:01 ` [PATCH v4 2/4] PCI: move Alibaba Vendor ID linux/pci_ids.h Shuai Xue
2023-05-16 13:01 ` [PATCH v4 3/4] drivers/perf: add DesignWare PCIe PMU driver Shuai Xue
2023-05-16 19:19 ` Bjorn Helgaas
2023-05-17 2:35 ` Shuai Xue
[not found] ` <202305170639.XU3djFZX-lkp@intel.com>
2023-05-17 3:37 ` Shuai Xue
2023-05-16 13:01 ` [PATCH v4 4/4] MAINTAINERS: add maintainers for " Shuai Xue
2023-05-22 3:54 ` [PATCH v5 0/4] drivers/perf: add Synopsys DesignWare PCIe PMU driver support Shuai Xue
2023-05-22 14:28 ` Jonathan Cameron
2023-05-23 2:57 ` Shuai Xue
2023-05-22 3:54 ` [PATCH v5 1/4] docs: perf: Add description for Synopsys DesignWare PCIe PMU driver Shuai Xue
2023-05-29 3:45 ` Baolin Wang
2023-05-29 6:31 ` Shuai Xue
2023-05-22 3:54 ` [PATCH v5 2/4] PCI: move Alibaba Vendor ID linux/pci_ids.h Shuai Xue
2023-05-22 16:04 ` Bjorn Helgaas
2023-05-23 3:22 ` Shuai Xue
2023-05-23 11:54 ` Bjorn Helgaas
2023-05-23 12:49 ` Shuai Xue
2023-05-22 3:54 ` [PATCH v5 3/4] drivers/perf: add DesignWare PCIe PMU driver Shuai Xue
2023-05-29 6:13 ` Baolin Wang
2023-05-29 6:33 ` Shuai Xue
2023-05-22 3:54 ` [PATCH v5 4/4] MAINTAINERS: add maintainers for " Shuai Xue
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=20230517105421.00003251@Huawei.com \
--to=jonathan.cameron@huawei.com \
--cc=baolin.wang@linux.alibaba.com \
--cc=helgaas@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-cxl@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=rdunlap@infradead.org \
--cc=robin.murphy@arm.com \
--cc=will@kernel.org \
--cc=xueshuai@linux.alibaba.com \
--cc=yangyicong@huawei.com \
--cc=zhuo.song@linux.alibaba.com \
/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).