usb: Probe EHCI, OHCI controllers asynchronously
authorDmitry Torokhov <dtor@chromium.org>
Wed, 18 May 2022 22:02:51 +0000 (15:02 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 19 May 2022 16:11:25 +0000 (18:11 +0200)
initcall_debug shows that OHCI controllers take ~60ms to probe on
Rockchip RK3399 systems:

  probe of fe3a0000.usb returned 1 after 58941 usecs

A few of these can add up to waste non-trivial amounts of time at boot.

These host controllers don't provide resources to other drivers, so
this shouldn't contribute to exposing race conditions.

Chrome OS kernels have carried this patch on some systems for a while
without issues. Similar patches have been merged for a variety of (e)MMC
host controllers for similar reasons.

[Brian: rewrote commit message, refreshed, but retained dtor's original
 authorship ]

Acked-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Dmitry Torokhov <dtor@chromium.org>
Signed-off-by: Brian Norris <briannorris@chromium.org>
Link: https://lore.kernel.org/r/20220518150150.1.Ie8ea0e945a9c15066237014be219eed60066d493@changeid
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/host/ehci-platform.c
drivers/usb/host/ohci-platform.c

index 1115431a255db6553754b20628656d64f91d71e1..f343967443e2376fbf83facf83699d97c4100f52 100644 (file)
@@ -518,6 +518,7 @@ static struct platform_driver ehci_platform_driver = {
                .pm     = pm_ptr(&ehci_platform_pm_ops),
                .of_match_table = vt8500_ehci_ids,
                .acpi_match_table = ACPI_PTR(ehci_acpi_match),
+               .probe_type = PROBE_PREFER_ASYNCHRONOUS,
        }
 };
 
index 4a8456f12a73dba3f461d6001f9569c67c3e0384..47dfbfe9e51902354e9bcebea4df7a268a2ca5e2 100644 (file)
@@ -334,6 +334,7 @@ static struct platform_driver ohci_platform_driver = {
                .name   = "ohci-platform",
                .pm     = &ohci_platform_pm_ops,
                .of_match_table = ohci_platform_ids,
+               .probe_type = PROBE_PREFER_ASYNCHRONOUS,
        }
 };