* [PATCH v8 1/1] PCI/sysfs: Expose PCI device serial number [not found] <20250917125815.722952-1-thepacketgeek@gmail.com> @ 2025-09-17 12:58 ` Matthew Wood 2025-09-17 15:54 ` Bjorn Helgaas 0 siblings, 1 reply; 2+ messages in thread From: Matthew Wood @ 2025-09-17 12:58 UTC (permalink / raw) To: Bjorn Helgaas Cc: Mario Limonciello, Jonathan Cameron, Thomas Weißschuh, Keith Busch, Krzysztof Wilczyński, linux-kernel, linux-pci Add a single sysfs read-only interface for reading PCI device serial numbers from userspace in a programmatic way. This device attribute uses the same hexadecimal 1-byte dashed formatting as lspci serial number capability output. If a device doesn't support the serial number capability, the serial_number sysfs attribute will not be visible. Signed-off-by: Matthew Wood <thepacketgeek@gmail.com> Reviewed-by: Mario Limonciello <superm1@kernel.org> Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com> Reviewed-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de> Reviewed-by: Keith Busch <kbusch@kernel.org> Reviewed-by: Krzysztof Wilczyński <kwilczynski@kernel.org> --- Documentation/ABI/testing/sysfs-bus-pci | 9 +++++++++ drivers/pci/pci-sysfs.c | 21 +++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/Documentation/ABI/testing/sysfs-bus-pci b/Documentation/ABI/testing/sysfs-bus-pci index 69f952fffec7..92debe879ffb 100644 --- a/Documentation/ABI/testing/sysfs-bus-pci +++ b/Documentation/ABI/testing/sysfs-bus-pci @@ -612,3 +612,12 @@ Description: # ls doe_features 0001:01 0001:02 doe_discovery + +What: /sys/bus/pci/devices/.../serial_number +Date: December 2025 +Contact: Matthew Wood <thepacketgeek@gmail.com> +Description: + This is visible only for PCI devices that support the serial + number extended capability. The file is read only and due to + the possible sensitivity of accessible serial numbers, admin + only. diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c index 268c69daa4d5..b7b7412c9f00 100644 --- a/drivers/pci/pci-sysfs.c +++ b/drivers/pci/pci-sysfs.c @@ -30,6 +30,7 @@ #include <linux/msi.h> #include <linux/of.h> #include <linux/aperture.h> +#include <linux/unaligned.h> #include "pci.h" #ifndef ARCH_PCI_DEV_GROUPS @@ -694,6 +695,22 @@ static ssize_t boot_vga_show(struct device *dev, struct device_attribute *attr, } static DEVICE_ATTR_RO(boot_vga); +static ssize_t serial_number_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct pci_dev *pci_dev = to_pci_dev(dev); + u64 dsn; + u8 bytes[8]; + + dsn = pci_get_dsn(pci_dev); + if (!dsn) + return -EIO; + put_unaligned_be64(dsn, bytes); + + return sysfs_emit(buf, "%8phD\n", bytes); +} +static DEVICE_ATTR_ADMIN_RO(serial_number); + static ssize_t pci_read_config(struct file *filp, struct kobject *kobj, const struct bin_attribute *bin_attr, char *buf, loff_t off, size_t count) @@ -1698,6 +1715,7 @@ late_initcall(pci_sysfs_init); static struct attribute *pci_dev_dev_attrs[] = { &dev_attr_boot_vga.attr, + &dev_attr_serial_number.attr, NULL, }; @@ -1710,6 +1728,9 @@ static umode_t pci_dev_attrs_are_visible(struct kobject *kobj, if (a == &dev_attr_boot_vga.attr && pci_is_vga(pdev)) return a->mode; + if (a == &dev_attr_serial_number.attr && pci_get_dsn(pdev)) + return a->mode; + return 0; } -- 2.50.1 ^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH v8 1/1] PCI/sysfs: Expose PCI device serial number 2025-09-17 12:58 ` [PATCH v8 1/1] PCI/sysfs: Expose PCI device serial number Matthew Wood @ 2025-09-17 15:54 ` Bjorn Helgaas 0 siblings, 0 replies; 2+ messages in thread From: Bjorn Helgaas @ 2025-09-17 15:54 UTC (permalink / raw) To: Matthew Wood Cc: Bjorn Helgaas, Mario Limonciello, Jonathan Cameron, Thomas Weißschuh, Keith Busch, Krzysztof Wilczyński, linux-kernel, linux-pci On Wed, Sep 17, 2025 at 05:58:14AM -0700, Matthew Wood wrote: > Add a single sysfs read-only interface for reading PCI device serial > numbers from userspace in a programmatic way. This device attribute > uses the same hexadecimal 1-byte dashed formatting as lspci serial number > capability output. If a device doesn't support the serial number > capability, the serial_number sysfs attribute will not be visible. > > Signed-off-by: Matthew Wood <thepacketgeek@gmail.com> > Reviewed-by: Mario Limonciello <superm1@kernel.org> > Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com> > Reviewed-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de> > Reviewed-by: Keith Busch <kbusch@kernel.org> > Reviewed-by: Krzysztof Wilczyński <kwilczynski@kernel.org> Applied to pci/misc for v6.18, thanks, and sorry for the inexcusable delay. > --- > Documentation/ABI/testing/sysfs-bus-pci | 9 +++++++++ > drivers/pci/pci-sysfs.c | 21 +++++++++++++++++++++ > 2 files changed, 30 insertions(+) > > diff --git a/Documentation/ABI/testing/sysfs-bus-pci b/Documentation/ABI/testing/sysfs-bus-pci > index 69f952fffec7..92debe879ffb 100644 > --- a/Documentation/ABI/testing/sysfs-bus-pci > +++ b/Documentation/ABI/testing/sysfs-bus-pci > @@ -612,3 +612,12 @@ Description: > > # ls doe_features > 0001:01 0001:02 doe_discovery > + > +What: /sys/bus/pci/devices/.../serial_number > +Date: December 2025 > +Contact: Matthew Wood <thepacketgeek@gmail.com> > +Description: > + This is visible only for PCI devices that support the serial > + number extended capability. The file is read only and due to > + the possible sensitivity of accessible serial numbers, admin > + only. > diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c > index 268c69daa4d5..b7b7412c9f00 100644 > --- a/drivers/pci/pci-sysfs.c > +++ b/drivers/pci/pci-sysfs.c > @@ -30,6 +30,7 @@ > #include <linux/msi.h> > #include <linux/of.h> > #include <linux/aperture.h> > +#include <linux/unaligned.h> > #include "pci.h" > > #ifndef ARCH_PCI_DEV_GROUPS > @@ -694,6 +695,22 @@ static ssize_t boot_vga_show(struct device *dev, struct device_attribute *attr, > } > static DEVICE_ATTR_RO(boot_vga); > > +static ssize_t serial_number_show(struct device *dev, > + struct device_attribute *attr, char *buf) > +{ > + struct pci_dev *pci_dev = to_pci_dev(dev); > + u64 dsn; > + u8 bytes[8]; > + > + dsn = pci_get_dsn(pci_dev); > + if (!dsn) > + return -EIO; > + put_unaligned_be64(dsn, bytes); > + > + return sysfs_emit(buf, "%8phD\n", bytes); > +} > +static DEVICE_ATTR_ADMIN_RO(serial_number); > + > static ssize_t pci_read_config(struct file *filp, struct kobject *kobj, > const struct bin_attribute *bin_attr, char *buf, > loff_t off, size_t count) > @@ -1698,6 +1715,7 @@ late_initcall(pci_sysfs_init); > > static struct attribute *pci_dev_dev_attrs[] = { > &dev_attr_boot_vga.attr, > + &dev_attr_serial_number.attr, > NULL, > }; > > @@ -1710,6 +1728,9 @@ static umode_t pci_dev_attrs_are_visible(struct kobject *kobj, > if (a == &dev_attr_boot_vga.attr && pci_is_vga(pdev)) > return a->mode; > > + if (a == &dev_attr_serial_number.attr && pci_get_dsn(pdev)) > + return a->mode; > + > return 0; > } > > -- > 2.50.1 > ^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2025-09-17 15:54 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20250917125815.722952-1-thepacketgeek@gmail.com>
2025-09-17 12:58 ` [PATCH v8 1/1] PCI/sysfs: Expose PCI device serial number Matthew Wood
2025-09-17 15:54 ` Bjorn Helgaas
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox