diff options
| author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2020-05-11 08:55:10 +0200 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2020-05-11 08:55:10 +0200 |
| commit | 1cc18584e5acfd845464616b66fb2fd81eff467e (patch) | |
| tree | 4b16a54c9dd234c5fe9efb9b346249003b588e09 /drivers/base/dd.c | |
| parent | 57253ccd5831e7e5720c433437775c3e6b7d0c72 (diff) | |
| parent | 2ef96a5bb12be62ef75b5828c0aab838ebb29cb8 (diff) | |
| download | linux-1cc18584e5acfd845464616b66fb2fd81eff467e.tar.gz linux-1cc18584e5acfd845464616b66fb2fd81eff467e.tar.bz2 linux-1cc18584e5acfd845464616b66fb2fd81eff467e.zip | |
Merge 5.7-rc5 into tty-next
We need the tty fixes in here too.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/base/dd.c')
| -rw-r--r-- | drivers/base/dd.c | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/drivers/base/dd.c b/drivers/base/dd.c index 06ec0e851fa1..94037be7f5d7 100644 --- a/drivers/base/dd.c +++ b/drivers/base/dd.c @@ -224,17 +224,9 @@ static int deferred_devs_show(struct seq_file *s, void *data) } DEFINE_SHOW_ATTRIBUTE(deferred_devs); -#ifdef CONFIG_MODULES -/* - * In the case of modules, set the default probe timeout to - * 30 seconds to give userland some time to load needed modules - */ -int driver_deferred_probe_timeout = 30; -#else -/* In the case of !modules, no probe timeout needed */ -int driver_deferred_probe_timeout = -1; -#endif +int driver_deferred_probe_timeout; EXPORT_SYMBOL_GPL(driver_deferred_probe_timeout); +static DECLARE_WAIT_QUEUE_HEAD(probe_timeout_waitqueue); static int __init deferred_probe_timeout_setup(char *str) { @@ -266,8 +258,8 @@ int driver_deferred_probe_check_state(struct device *dev) return -ENODEV; } - if (!driver_deferred_probe_timeout) { - dev_WARN(dev, "deferred probe timeout, ignoring dependency"); + if (!driver_deferred_probe_timeout && initcalls_done) { + dev_warn(dev, "deferred probe timeout, ignoring dependency"); return -ETIMEDOUT; } @@ -284,6 +276,7 @@ static void deferred_probe_timeout_work_func(struct work_struct *work) list_for_each_entry_safe(private, p, &deferred_probe_pending_list, deferred_probe) dev_info(private->device, "deferred probe pending"); + wake_up(&probe_timeout_waitqueue); } static DECLARE_DELAYED_WORK(deferred_probe_timeout_work, deferred_probe_timeout_work_func); @@ -658,6 +651,9 @@ int driver_probe_done(void) */ void wait_for_device_probe(void) { + /* wait for probe timeout */ + wait_event(probe_timeout_waitqueue, !driver_deferred_probe_timeout); + /* wait for the deferred probe workqueue to finish */ flush_work(&deferred_probe_work); |
