drivers/pci/pci-sysfs.c | 9 --------- drivers/pci/proc.c | 3 --- 2 files changed, 12 deletions(-)
Both pci_create_sysfs_dev_files() and pci_proc_attach_device() are called
from pci_bus_add_device(). Calling these APIs from other places is prone to
a race condition as nothing prevents the callers from racing against
each other.
Moreover, the proper place to create SYSFS and PROCFS entries is during
the 'pci_dev' creation. So there is no real need to call these APIs
elsewhere.
Hence, remove the calls from pci_sysfs_init() and pci_proc_init().
Reported-by: Shuan He <heshuan@bytedance.com>
Closes: https://lore.kernel.org/linux-pci/20250702155112.40124-1-heshuan@bytedance.com
Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>
---
drivers/pci/pci-sysfs.c | 9 ---------
drivers/pci/proc.c | 3 ---
2 files changed, 12 deletions(-)
diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
index 268c69daa4d5..8e712c14e6ea 100644
--- a/drivers/pci/pci-sysfs.c
+++ b/drivers/pci/pci-sysfs.c
@@ -1676,18 +1676,9 @@ void pci_remove_sysfs_dev_files(struct pci_dev *pdev)
static int __init pci_sysfs_init(void)
{
- struct pci_dev *pdev = NULL;
struct pci_bus *pbus = NULL;
- int retval;
sysfs_initialized = 1;
- for_each_pci_dev(pdev) {
- retval = pci_create_sysfs_dev_files(pdev);
- if (retval) {
- pci_dev_put(pdev);
- return retval;
- }
- }
while ((pbus = pci_find_next_bus(pbus)))
pci_create_legacy_files(pbus);
diff --git a/drivers/pci/proc.c b/drivers/pci/proc.c
index 9348a0fb8084..b78286afe18e 100644
--- a/drivers/pci/proc.c
+++ b/drivers/pci/proc.c
@@ -463,13 +463,10 @@ int pci_proc_detach_bus(struct pci_bus *bus)
static int __init pci_proc_init(void)
{
- struct pci_dev *dev = NULL;
proc_bus_pci_dir = proc_mkdir("bus/pci", NULL);
proc_create_seq("devices", 0, proc_bus_pci_dir,
&proc_bus_pci_devices_op);
proc_initialized = 1;
- for_each_pci_dev(dev)
- pci_proc_attach_device(dev);
return 0;
}
--
2.45.2
On Wed, Jul 23, 2025 at 04:41:24PM +0530, Manivannan Sadhasivam wrote: > Both pci_create_sysfs_dev_files() and pci_proc_attach_device() are called > from pci_bus_add_device(). Calling these APIs from other places is prone to > a race condition as nothing prevents the callers from racing against > each other. > > Moreover, the proper place to create SYSFS and PROCFS entries is during > the 'pci_dev' creation. So there is no real need to call these APIs > elsewhere. The raison d'être for the call to pci_create_sysfs_dev_files() in pci_sysfs_init() is that PCI_ROM_RESOURCEs may appear after device enumeration but before the late_initcall stage: https://lore.kernel.org/r/20231019200110.GA1410324@bhelgaas/ Your patch will regress those platforms. The proper solution is to make the resource files in sysfs static and call sysfs_update_group() from pci_sysfs_init(). Krzysztof has an old branch where he started working on this: https://github.com/kwilczynski/linux/commits/kwilczynski/sysfs-static-resource-attributes/ Thanks, Lukas
On Wed, Jul 23, 2025 at 02:55:28PM GMT, Lukas Wunner wrote: > On Wed, Jul 23, 2025 at 04:41:24PM +0530, Manivannan Sadhasivam wrote: > > Both pci_create_sysfs_dev_files() and pci_proc_attach_device() are called > > from pci_bus_add_device(). Calling these APIs from other places is prone to > > a race condition as nothing prevents the callers from racing against > > each other. > > > > Moreover, the proper place to create SYSFS and PROCFS entries is during > > the 'pci_dev' creation. So there is no real need to call these APIs > > elsewhere. > > The raison d'être for the call to pci_create_sysfs_dev_files() in > pci_sysfs_init() is that PCI_ROM_RESOURCEs may appear after device > enumeration but before the late_initcall stage: > > https://lore.kernel.org/r/20231019200110.GA1410324@bhelgaas/ > > Your patch will regress those platforms. > Ok, thanks for the pointer. I was not aware of this issue. > The proper solution is to make the resource files in sysfs static > and call sysfs_update_group() from pci_sysfs_init(). > > Krzysztof has an old branch where he started working on this: > > https://github.com/kwilczynski/linux/commits/kwilczynski/sysfs-static-resource-attributes/ > I had a chat with Krzysztof offline and he promised me that he will revive this effort (thanks Krzysztof!). - Mani -- மணிவண்ணன் சதாசிவம்
© 2016 - 2025 Red Hat, Inc.