linux-pci.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] PCI: Allow drivers to opt in to async probing
@ 2025-07-04  7:38 Lukas Wunner
  2025-07-08 23:11 ` Bjorn Helgaas
  2025-07-14 13:45 ` Christoph Hellwig
  0 siblings, 2 replies; 8+ messages in thread
From: Lukas Wunner @ 2025-07-04  7:38 UTC (permalink / raw)
  To: Bjorn Helgaas, Dmitry Torokhov, linux-pci
  Cc: Yaron Avizrat, Koby Elbaz, Konstantin Sinyuk, Davidlohr Bueso,
	Jonathan Cameron, Dave Jiang, Alison Schofield, Vishal Verma,
	Ira Weiny, Dan Williams, Even Xu, Xinpeng Sun, Jean Delvare,
	Alexander Usyskin, Adrian Hunter, Keith Busch, Jens Axboe,
	Christoph Hellwig, Sagi Grimberg, Alan Stern, K. Y. Srinivasan,
	Haiyang Zhang, Wei Liu, Dexuan Cui, Stuart Hayes, David Jeffery,
	Jeremy Allison

The PCI core has historically not allowed drivers to opt in to async
probing:  Even though drivers may set "PROBE_PREFER_ASYNCHRONOUS", initial
probing always happens synchronously.  That's because the PCI core uses
device_attach() instead of device_initial_probe().

Should a driver return -EPROBE_DEFER on initial probe, reprobing later on
does honor the PROBE_PREFER_ASYNCHRONOUS setting, which is inconsistent.

The choice of device_attach() is likely not deliberate:  It was introduced
in 2013 with commit 58d9a38f6fac ("PCI: Skip attaching driver in
device_add()"), but asynchronous probing was added two years later with
commit 765230b5f084 ("driver-core: add asynchronous probing support for
drivers").

According to the kernel-doc of "enum probe_type", "the end goal is to
switch the kernel to use asynchronous probing by default".  To this end,
use device_initial_probe() to allow asynchronous probing.  The function
returns void, making the return value check unnecessary.

Initial PCI probing often takes on the order of seconds even on laptops,
so this may speed up booting significantly.

Curiously, a small number of PCI drivers already opt in to asynchronous
probing.  Their maintainters (who are all cc'ed) should watch out for
issues, now that asynchronous probing is not just allowed for deferred
probing, but also initial probing:

hl_pci_driver        drivers/accel/habanalabs/common/habanalabs_drv.c
cxl_pci_driver       drivers/cxl/pci.c
quicki2c_driver      drivers/hid/intel-thc-hid/intel-quicki2c/pci-quicki2c.c
quickspi_driver      drivers/hid/intel-thc-hid/intel-quickspi/pci-quickspi.c
i801_driver          drivers/i2c/busses/i2c-i801.c
mei_me_driver        drivers/misc/mei/pci-me.c
mei_vsc_drv          drivers/misc/mei/platform-vsc.c
sdhci_driver         drivers/mmc/host/sdhci-pci-core.c
nvme_driver          drivers/nvme/host/pci.c
ehci_pci_driver      drivers/usb/host/ehci-pci.c
hvfb_pci_stub_driver drivers/video/fbdev/hyperv_fb.c

All other driver maintainers may test asynchronous probing by specifying
the command line parameter "driver_async_probe=drv_name1,drv_name2,...",
and on success setting "probe_type = PROBE_PREFER_ASYNCHRONOUS" in the
pci_driver struct.

Signed-off-by: Lukas Wunner <lukas@wunner.de>
---
 drivers/pci/bus.c | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/drivers/pci/bus.c b/drivers/pci/bus.c
index 69048869ef1c..b77fd30bbfd9 100644
--- a/drivers/pci/bus.c
+++ b/drivers/pci/bus.c
@@ -341,7 +341,6 @@ void pci_bus_add_device(struct pci_dev *dev)
 {
 	struct device_node *dn = dev->dev.of_node;
 	struct platform_device *pdev;
-	int retval;
 
 	/*
 	 * Can not put in pci_device_add yet because resources
@@ -372,9 +371,7 @@ void pci_bus_add_device(struct pci_dev *dev)
 	if (!dn || of_device_is_available(dn))
 		pci_dev_allow_binding(dev);
 
-	retval = device_attach(&dev->dev);
-	if (retval < 0 && retval != -EPROBE_DEFER)
-		pci_warn(dev, "device attach failed (%d)\n", retval);
+	device_initial_probe(&dev->dev);
 
 	pci_dev_assign_added(dev);
 }
-- 
2.47.2


^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2025-07-15 16:26 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-04  7:38 [PATCH] PCI: Allow drivers to opt in to async probing Lukas Wunner
2025-07-08 23:11 ` Bjorn Helgaas
2025-07-14 13:45 ` Christoph Hellwig
2025-07-14 14:20   ` Lukas Wunner
2025-07-15  6:13     ` Christoph Hellwig
2025-07-15  6:35       ` dan.j.williams
2025-07-15  8:42         ` Lukas Wunner
2025-07-15 16:26           ` Bjorn Helgaas

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).