[PATCH v6 10/24] PCI/sysfs: Limit pci_sysfs_init() late_initcall compile scope
Krzysztof Wilczyński
kwilczynski at kernel.org
Thu Apr 23 02:13:53 AEST 2026
Currently, pci_sysfs_init() and sysfs_initialized compile
unconditionally, even on platforms where static attribute
groups handle all resource file creation.
Thus, place them behind a new HAVE_PCI_SYSFS_INIT macro,
especially as the late_initcall is only needed when:
- HAVE_PCI_LEGACY is set, to iterate buses and create legacy
I/O and memory files.
- Neither HAVE_PCI_MMAP nor ARCH_GENERIC_PCI_MMAP_RESOURCE is
set, to iterate devices and create resource files via the
__weak pci_create_resource_files() stub override (this is
how the Alpha architecture handles this currently).
On most systems both conditions are false and the entire
late_initcall compiles away.
Signed-off-by: Krzysztof Wilczyński <kwilczynski at kernel.org>
---
drivers/pci/pci-sysfs.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
index 517efb6d71cc..d22bc5c48bc0 100644
--- a/drivers/pci/pci-sysfs.c
+++ b/drivers/pci/pci-sysfs.c
@@ -37,7 +37,14 @@
#define ARCH_PCI_DEV_GROUPS
#endif
+#if defined(HAVE_PCI_LEGACY) || \
+ !defined(HAVE_PCI_MMAP) && !defined(ARCH_GENERIC_PCI_MMAP_RESOURCE)
+#define HAVE_PCI_SYSFS_INIT
+#endif
+
+#ifdef HAVE_PCI_SYSFS_INIT
static int sysfs_initialized; /* = 0 */
+#endif
/* show configuration fields */
#define pci_config_attr(field, format_string) \
@@ -1792,6 +1799,7 @@ void pci_remove_sysfs_dev_files(struct pci_dev *pdev)
}
#endif
+#ifdef HAVE_PCI_SYSFS_INIT
static int __init pci_sysfs_init(void)
{
#if defined(HAVE_PCI_MMAP) || defined(ARCH_GENERIC_PCI_MMAP_RESOURCE)
@@ -1818,6 +1826,7 @@ static int __init pci_sysfs_init(void)
return 0;
}
late_initcall(pci_sysfs_init);
+#endif
static struct attribute *pci_dev_dev_attrs[] = {
&dev_attr_boot_vga.attr,
--
2.54.0
More information about the Linuxppc-dev
mailing list