Documentation/admin-guide/kernel-parameters.txt | 2 +- drivers/base/Kconfig | 9 +++++++++ drivers/base/dd.c | 6 +----- 3 files changed, 11 insertions(+), 6 deletions(-)
Code using driver_deferred_probe_check_state() differs from most
EPROBE_DEFER handling in the kernel. Where other EPROBE_DEFER handling
(e.g. clks, gpios and regulators) waits indefinitely for suppliers to
show up, code using driver_deferred_probe_check_state() will fail
after the deferred_probe_timeout.
This is a problem for generic distro kernels which want to support many
boards using a single kernel build. These kernels want as much drivers to
be modular as possible. The initrd also should be as small as possible,
so the initrd will *not* have drivers not needing to get the rootfs.
Combine this with waiting for a full-disk encryption password in
the initrd and it is pretty much guaranteed that the default 10s timeout
will be hit, causing probe() failures when drivers on the rootfs happen
to get modprobe-d before other rootfs modules providing their suppliers.
Make the default timeout configurable from Kconfig to allow distro kernel
configs where many of the supplier drivers are modules to set the default
through Kconfig.
While at it document that a value of -1 can be used to disable the timeout
(wait indefinitely).
Acked-by: Saravana Kannan <saravanak@kernel.org>
Signed-off-by: Hans de Goede <johannes.goede@oss.qualcomm.com>
---
Changes in v2:
- Remove unnecessary addition of "if (driver_deferred_probe_timeout < 0)"
check
- Add Acked-by from Saravana
---
Documentation/admin-guide/kernel-parameters.txt | 2 +-
drivers/base/Kconfig | 9 +++++++++
drivers/base/dd.c | 6 +-----
3 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
index aa0031108bc1..d26957741713 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -1250,7 +1250,7 @@ Kernel parameters
out hasn't expired, it'll be restarted by each
successful driver registration. This option will also
dump out devices still on the deferred probe list after
- retrying.
+ retrying. Set to -1 to wait indefinitely.
delayacct [KNL] Enable per-task delay accounting
diff --git a/drivers/base/Kconfig b/drivers/base/Kconfig
index 1786d87b29e2..f7d385cbd3ba 100644
--- a/drivers/base/Kconfig
+++ b/drivers/base/Kconfig
@@ -73,6 +73,15 @@ config DEVTMPFS_SAFE
with the PROT_EXEC flag. This can break, for example, non-KMS
video drivers.
+config DRIVER_DEFERRED_PROBE_TIMEOUT
+ int "Default value for deferred_probe_timeout"
+ default 0 if !MODULES
+ default 10 if MODULES
+ help
+ Set the default value for the deferred_probe_timeout kernel parameter.
+ See Documentation/admin-guide/kernel-parameters.txt for a description
+ of the deferred_probe_timeout kernel parameter.
+
config STANDALONE
bool "Select only drivers that don't need compile-time external firmware"
default y
diff --git a/drivers/base/dd.c b/drivers/base/dd.c
index bea8da5f8a3a..2f358e29e0e8 100644
--- a/drivers/base/dd.c
+++ b/drivers/base/dd.c
@@ -257,11 +257,7 @@ static int deferred_devs_show(struct seq_file *s, void *data)
}
DEFINE_SHOW_ATTRIBUTE(deferred_devs);
-#ifdef CONFIG_MODULES
-static int driver_deferred_probe_timeout = 10;
-#else
-static int driver_deferred_probe_timeout;
-#endif
+static int driver_deferred_probe_timeout = CONFIG_DRIVER_DEFERRED_PROBE_TIMEOUT;
static int __init deferred_probe_timeout_setup(char *str)
{
--
2.52.0
On Thu, Feb 12, 2026 at 6:54 AM Hans de Goede
<johannes.goede@oss.qualcomm.com> wrote:
>
> Code using driver_deferred_probe_check_state() differs from most
> EPROBE_DEFER handling in the kernel. Where other EPROBE_DEFER handling
> (e.g. clks, gpios and regulators) waits indefinitely for suppliers to
> show up, code using driver_deferred_probe_check_state() will fail
> after the deferred_probe_timeout.
>
> This is a problem for generic distro kernels which want to support many
> boards using a single kernel build. These kernels want as much drivers to
> be modular as possible. The initrd also should be as small as possible,
> so the initrd will *not* have drivers not needing to get the rootfs.
>
> Combine this with waiting for a full-disk encryption password in
> the initrd and it is pretty much guaranteed that the default 10s timeout
> will be hit, causing probe() failures when drivers on the rootfs happen
> to get modprobe-d before other rootfs modules providing their suppliers.
>
> Make the default timeout configurable from Kconfig to allow distro kernel
> configs where many of the supplier drivers are modules to set the default
> through Kconfig.
>
> While at it document that a value of -1 can be used to disable the timeout
> (wait indefinitely).
>
> Acked-by: Saravana Kannan <saravanak@kernel.org>
> Signed-off-by: Hans de Goede <johannes.goede@oss.qualcomm.com>
> ---
> Changes in v2:
> - Remove unnecessary addition of "if (driver_deferred_probe_timeout < 0)"
> check
> - Add Acked-by from Saravana
> ---
> Documentation/admin-guide/kernel-parameters.txt | 2 +-
> drivers/base/Kconfig | 9 +++++++++
> drivers/base/dd.c | 6 +-----
> 3 files changed, 11 insertions(+), 6 deletions(-)
>
> diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
> index aa0031108bc1..d26957741713 100644
> --- a/Documentation/admin-guide/kernel-parameters.txt
> +++ b/Documentation/admin-guide/kernel-parameters.txt
> @@ -1250,7 +1250,7 @@ Kernel parameters
> out hasn't expired, it'll be restarted by each
> successful driver registration. This option will also
> dump out devices still on the deferred probe list after
> - retrying.
> + retrying. Set to -1 to wait indefinitely.
Forgot to fix this?
You can add my reviewed by after fixing this.
-Saravana
>
> delayacct [KNL] Enable per-task delay accounting
>
> diff --git a/drivers/base/Kconfig b/drivers/base/Kconfig
> index 1786d87b29e2..f7d385cbd3ba 100644
> --- a/drivers/base/Kconfig
> +++ b/drivers/base/Kconfig
> @@ -73,6 +73,15 @@ config DEVTMPFS_SAFE
> with the PROT_EXEC flag. This can break, for example, non-KMS
> video drivers.
>
> +config DRIVER_DEFERRED_PROBE_TIMEOUT
> + int "Default value for deferred_probe_timeout"
> + default 0 if !MODULES
> + default 10 if MODULES
> + help
> + Set the default value for the deferred_probe_timeout kernel parameter.
> + See Documentation/admin-guide/kernel-parameters.txt for a description
> + of the deferred_probe_timeout kernel parameter.
> +
> config STANDALONE
> bool "Select only drivers that don't need compile-time external firmware"
> default y
> diff --git a/drivers/base/dd.c b/drivers/base/dd.c
> index bea8da5f8a3a..2f358e29e0e8 100644
> --- a/drivers/base/dd.c
> +++ b/drivers/base/dd.c
> @@ -257,11 +257,7 @@ static int deferred_devs_show(struct seq_file *s, void *data)
> }
> DEFINE_SHOW_ATTRIBUTE(deferred_devs);
>
> -#ifdef CONFIG_MODULES
> -static int driver_deferred_probe_timeout = 10;
> -#else
> -static int driver_deferred_probe_timeout;
> -#endif
> +static int driver_deferred_probe_timeout = CONFIG_DRIVER_DEFERRED_PROBE_TIMEOUT;
>
> static int __init deferred_probe_timeout_setup(char *str)
> {
> --
> 2.52.0
>
Hi,
On 12-Feb-26 16:22, Saravana Kannan wrote:
> On Thu, Feb 12, 2026 at 6:54 AM Hans de Goede
> <johannes.goede@oss.qualcomm.com> wrote:
>>
>> Code using driver_deferred_probe_check_state() differs from most
>> EPROBE_DEFER handling in the kernel. Where other EPROBE_DEFER handling
>> (e.g. clks, gpios and regulators) waits indefinitely for suppliers to
>> show up, code using driver_deferred_probe_check_state() will fail
>> after the deferred_probe_timeout.
>>
>> This is a problem for generic distro kernels which want to support many
>> boards using a single kernel build. These kernels want as much drivers to
>> be modular as possible. The initrd also should be as small as possible,
>> so the initrd will *not* have drivers not needing to get the rootfs.
>>
>> Combine this with waiting for a full-disk encryption password in
>> the initrd and it is pretty much guaranteed that the default 10s timeout
>> will be hit, causing probe() failures when drivers on the rootfs happen
>> to get modprobe-d before other rootfs modules providing their suppliers.
>>
>> Make the default timeout configurable from Kconfig to allow distro kernel
>> configs where many of the supplier drivers are modules to set the default
>> through Kconfig.
>>
>> While at it document that a value of -1 can be used to disable the timeout
>> (wait indefinitely).
>>
>> Acked-by: Saravana Kannan <saravanak@kernel.org>
>> Signed-off-by: Hans de Goede <johannes.goede@oss.qualcomm.com>
>> ---
>> Changes in v2:
>> - Remove unnecessary addition of "if (driver_deferred_probe_timeout < 0)"
>> check
>> - Add Acked-by from Saravana
>> ---
>> Documentation/admin-guide/kernel-parameters.txt | 2 +-
>> drivers/base/Kconfig | 9 +++++++++
>> drivers/base/dd.c | 6 +-----
>> 3 files changed, 11 insertions(+), 6 deletions(-)
>>
>> diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
>> index aa0031108bc1..d26957741713 100644
>> --- a/Documentation/admin-guide/kernel-parameters.txt
>> +++ b/Documentation/admin-guide/kernel-parameters.txt
>> @@ -1250,7 +1250,7 @@ Kernel parameters
>> out hasn't expired, it'll be restarted by each
>> successful driver registration. This option will also
>> dump out devices still on the deferred probe list after
>> - retrying.
>> + retrying. Set to -1 to wait indefinitely.
>
> Forgot to fix this?
As mentioned in the updated commit message:
"While at it document that a value of -1 can be used to disable the timeout
(wait indefinitely)."
I dropped the code-changes for this since -1 is already supported,
it still seems like a good idea to document that -1 can be used
so I decided to keep the documentation change.
Regards,
Hans
>>
>> delayacct [KNL] Enable per-task delay accounting
>>
>> diff --git a/drivers/base/Kconfig b/drivers/base/Kconfig
>> index 1786d87b29e2..f7d385cbd3ba 100644
>> --- a/drivers/base/Kconfig
>> +++ b/drivers/base/Kconfig
>> @@ -73,6 +73,15 @@ config DEVTMPFS_SAFE
>> with the PROT_EXEC flag. This can break, for example, non-KMS
>> video drivers.
>>
>> +config DRIVER_DEFERRED_PROBE_TIMEOUT
>> + int "Default value for deferred_probe_timeout"
>> + default 0 if !MODULES
>> + default 10 if MODULES
>> + help
>> + Set the default value for the deferred_probe_timeout kernel parameter.
>> + See Documentation/admin-guide/kernel-parameters.txt for a description
>> + of the deferred_probe_timeout kernel parameter.
>> +
>> config STANDALONE
>> bool "Select only drivers that don't need compile-time external firmware"
>> default y
>> diff --git a/drivers/base/dd.c b/drivers/base/dd.c
>> index bea8da5f8a3a..2f358e29e0e8 100644
>> --- a/drivers/base/dd.c
>> +++ b/drivers/base/dd.c
>> @@ -257,11 +257,7 @@ static int deferred_devs_show(struct seq_file *s, void *data)
>> }
>> DEFINE_SHOW_ATTRIBUTE(deferred_devs);
>>
>> -#ifdef CONFIG_MODULES
>> -static int driver_deferred_probe_timeout = 10;
>> -#else
>> -static int driver_deferred_probe_timeout;
>> -#endif
>> +static int driver_deferred_probe_timeout = CONFIG_DRIVER_DEFERRED_PROBE_TIMEOUT;
>>
>> static int __init deferred_probe_timeout_setup(char *str)
>> {
>> --
>> 2.52.0
>>
© 2016 - 2026 Red Hat, Inc.