From: Jonathan Cameron <Jonathan.Cameron@Huawei.com>
To: Alistair Francis <alistair23@gmail.com>
Cc: <bhelgaas@google.com>, <linux-pci@vger.kernel.org>,
<lukas@wunner.de>, <alex.williamson@redhat.com>,
<christian.koenig@amd.com>, <kch@nvidia.com>,
<gregkh@linuxfoundation.org>, <logang@deltatee.com>,
<linux-kernel@vger.kernel.org>, <chaitanyak@nvidia.com>,
<rdunlap@infradead.org>,
Alistair Francis <alistair.francis@wdc.com>
Subject: Re: [PATCH v12 3/4] PCI/DOE: Expose the DOE features via sysfs
Date: Mon, 1 Jul 2024 12:27:21 +0100 [thread overview]
Message-ID: <20240701122721.0000034d@Huawei.com> (raw)
In-Reply-To: <20240626045926.680380-3-alistair.francis@wdc.com>
On Wed, 26 Jun 2024 14:59:25 +1000
Alistair Francis <alistair23@gmail.com> wrote:
> The PCIe 6 specification added support for the Data Object
> Exchange (DOE).
> When DOE is supported the DOE Discovery Feature must be implemented per
> PCIe r6.1 sec 6.30.1.1. The protocol allows a requester to obtain
> information about the other DOE features supported by the device.
>
> The kernel is already querying the DOE features supported and cacheing
> the values. Expose the values in sysfs to allow user space to
> determine which DOE features are supported by the PCIe device.
>
> By exposing the information to userspace tools like lspci can relay the
> information to users. By listing all of the supported features we can
> allow userspace to parse the list, which might include
> vendor specific features as well as yet to be supported features.
>
> As the DOE Discovery feature must always be supported we treat it as a
> special named attribute case. This allows the usual PCI attribute_group
> handling to correctly create the doe_features directory when registering
> pci_doe_sysfs_group (otherwise it doesn't and sysfs_add_file_to_group()
> will seg fault).
>
> After this patch is supported you can see something like this when
> attaching a DOE device
>
> $ ls /sys/devices/pci0000:00/0000:00:02.0//doe*
> 0001:01 0001:02 doe_discovery
>
> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
Hi Alistair,
I think I missed an error path issue in earlier reviews.
Suggestion for minimal fix inline. If that is fine feel
free to add
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> diff --git a/drivers/pci/doe.c b/drivers/pci/doe.c
> index defc4be81bd4..580370dc71ee 100644
> --- a/drivers/pci/doe.c
> +++ b/drivers/pci/doe.c
> +
> +int pci_doe_sysfs_init(struct pci_dev *pdev)
> +{
> + struct pci_doe_mb *doe_mb;
> + unsigned long index;
> + int ret;
> +
> + xa_for_each(&pdev->doe_mbs, index, doe_mb) {
> + ret = pci_doe_sysfs_feature_populate(pdev, doe_mb);
This doesn't feel quite right. If we wait after a doe_mb features
set succeeds and then an error occurs this code doesn't cleanup and...
> + if (ret)
> + return ret;
> + }
> +
> + return 0;
> +}
> +#endif
> +
> static int pci_doe_wait(struct pci_doe_mb *doe_mb, unsigned long timeout)
> {
> if (wait_event_timeout(doe_mb->wq,
> diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
> index 40cfa716392f..b5db191cb29f 100644
> --- a/drivers/pci/pci-sysfs.c
> +++ b/drivers/pci/pci-sysfs.c
> @@ -16,6 +16,7 @@
> #include <linux/kernel.h>
> #include <linux/sched.h>
> #include <linux/pci.h>
> +#include <linux/pci-doe.h>
> #include <linux/stat.h>
> #include <linux/export.h>
> #include <linux/topology.h>
> @@ -1143,6 +1144,9 @@ static void pci_remove_resource_files(struct pci_dev *pdev)
> {
> int i;
>
> + if (IS_ENABLED(CONFIG_PCI_DOE))
> + pci_doe_sysfs_teardown(pdev);
> +
> for (i = 0; i < PCI_STD_NUM_BARS; i++) {
> struct bin_attribute *res_attr;
>
> @@ -1227,6 +1231,12 @@ static int pci_create_resource_files(struct pci_dev *pdev)
> int i;
> int retval;
>
> + if (IS_ENABLED(CONFIG_PCI_DOE)) {
> + retval = pci_doe_sysfs_init(pdev);
> + if (retval)
... this doesn't call pci_remove_resource_files() unlike te
other error path in this function which does.
I think just calling that here would be sufficient and inline
with how error cleanup works for the rest of this code.
Personally I prefer driving for a function to have no side effects
but such is life.
> + return retval;
> + }
> +
> /* Expose the PCI resources from this device as files */
> for (i = 0; i < PCI_STD_NUM_BARS; i++) {
>
> @@ -1661,6 +1671,9 @@ const struct attribute_group *pci_dev_attr_groups[] = {
> #endif
> #ifdef CONFIG_PCIEASPM
> &aspm_ctrl_attr_group,
> +#endif
> +#ifdef CONFIG_PCI_DOE
> + &pci_doe_sysfs_group,
> #endif
> NULL,
> };
next prev parent reply other threads:[~2024-07-01 11:27 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-26 4:59 [PATCH v12 1/4] PCI/DOE: Rename DOE protocol to feature Alistair Francis
2024-06-26 4:59 ` [PATCH v12 2/4] PCI/DOE: Rename Discovery Response Data Object Contents to type Alistair Francis
2024-06-26 4:59 ` [PATCH v12 3/4] PCI/DOE: Expose the DOE features via sysfs Alistair Francis
2024-07-01 11:27 ` Jonathan Cameron [this message]
2024-07-02 5:59 ` Alistair Francis
2024-06-26 4:59 ` [PATCH v12 4/4] PCI/DOE: Allow enabling DOE without CXL Alistair Francis
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=20240701122721.0000034d@Huawei.com \
--to=jonathan.cameron@huawei.com \
--cc=alex.williamson@redhat.com \
--cc=alistair.francis@wdc.com \
--cc=alistair23@gmail.com \
--cc=bhelgaas@google.com \
--cc=chaitanyak@nvidia.com \
--cc=christian.koenig@amd.com \
--cc=gregkh@linuxfoundation.org \
--cc=kch@nvidia.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=logang@deltatee.com \
--cc=lukas@wunner.de \
--cc=rdunlap@infradead.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.