Message ID | 20200220050440.45878-6-john.stultz@linaro.org (mailing list archive) |
---|---|
State | Not Applicable, archived |
Headers | show |
Series | driver core: Try to improve and cleanup driver_deferred_probe_check_state() | expand |
On Thu, Feb 20, 2020 at 6:05 AM John Stultz <john.stultz@linaro.org> wrote: > > Since other subsystems (like regulator) have similar arbitrary > timeouts for how long they try to resolve driver dependencies, > rename deferred_probe_timeout to driver_deferred_probe_timeout > and set it as global, so it can be shared. Fair enough. > Cc: Rob Herring <robh@kernel.org> > Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net> > Cc: Kevin Hilman <khilman@kernel.org> > Cc: Ulf Hansson <ulf.hansson@linaro.org> > Cc: Pavel Machek <pavel@ucw.cz> > Cc: Len Brown <len.brown@intel.com> > Cc: Todd Kjos <tkjos@google.com> > Cc: Bjorn Andersson <bjorn.andersson@linaro.org> > Cc: Liam Girdwood <lgirdwood@gmail.com> > Cc: Mark Brown <broonie@kernel.org> > Cc: Thierry Reding <treding@nvidia.com> > Cc: Linus Walleij <linus.walleij@linaro.org> > Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > Cc: linux-pm@vger.kernel.org > Signed-off-by: John Stultz <john.stultz@linaro.org> > Change-Id: I92ee3b392004ecc9217c5337b54eda48c2d7f3ee Reviewed-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > --- > v4: > * Split out into its own patch as suggested by Mark > * Renamed deferred_probe_timeout as suggested by Greg > --- > drivers/base/dd.c | 18 ++++++++++-------- > include/linux/device/driver.h | 1 + > 2 files changed, 11 insertions(+), 8 deletions(-) > > diff --git a/drivers/base/dd.c b/drivers/base/dd.c > index 408e4da081da..39f1ce6d4f1c 100644 > --- a/drivers/base/dd.c > +++ b/drivers/base/dd.c > @@ -229,17 +229,19 @@ DEFINE_SHOW_ATTRIBUTE(deferred_devs); > * In the case of modules, set the default probe timeout to > * 30 seconds to give userland some time to load needed modules > */ > -static int deferred_probe_timeout = 30; > +int driver_deferred_probe_timeout = 30; > #else > /* In the case of !modules, no probe timeout needed */ > -static int deferred_probe_timeout = -1; > +int driver_deferred_probe_timeout = -1; > #endif > +EXPORT_SYMBOL_GPL(driver_deferred_probe_timeout); > + > static int __init deferred_probe_timeout_setup(char *str) > { > int timeout; > > if (!kstrtoint(str, 10, &timeout)) > - deferred_probe_timeout = timeout; > + driver_deferred_probe_timeout = timeout; > return 1; > } > __setup("deferred_probe_timeout=", deferred_probe_timeout_setup); > @@ -259,10 +261,10 @@ __setup("deferred_probe_timeout=", deferred_probe_timeout_setup); > */ > int driver_deferred_probe_check_state(struct device *dev) > { > - if (!initcalls_done || deferred_probe_timeout > 0) > + if (!initcalls_done || driver_deferred_probe_timeout > 0) > return -EPROBE_DEFER; > > - if (!deferred_probe_timeout) { > + if (!driver_deferred_probe_timeout) { > dev_WARN(dev, "deferred probe timeout, ignoring dependency"); > return -ETIMEDOUT; > } > @@ -276,7 +278,7 @@ static void deferred_probe_timeout_work_func(struct work_struct *work) > { > struct device_private *private, *p; > > - deferred_probe_timeout = 0; > + driver_deferred_probe_timeout = 0; > driver_deferred_probe_trigger(); > flush_work(&deferred_probe_work); > > @@ -310,9 +312,9 @@ static int deferred_probe_initcall(void) > driver_deferred_probe_trigger(); > flush_work(&deferred_probe_work); > > - if (deferred_probe_timeout > 0) { > + if (driver_deferred_probe_timeout > 0) { > schedule_delayed_work(&deferred_probe_timeout_work, > - deferred_probe_timeout * HZ); > + driver_deferred_probe_timeout * HZ); > } > return 0; > } > diff --git a/include/linux/device/driver.h b/include/linux/device/driver.h > index 5242afabfaba..ee7ba5b5417e 100644 > --- a/include/linux/device/driver.h > +++ b/include/linux/device/driver.h > @@ -236,6 +236,7 @@ driver_find_device_by_acpi_dev(struct device_driver *drv, const void *adev) > } > #endif > > +extern int driver_deferred_probe_timeout; > void driver_deferred_probe_add(struct device *dev); > int driver_deferred_probe_check_state(struct device *dev); > void driver_init(void); > -- > 2.17.1 >
On Wed 19 Feb 21:04 PST 2020, John Stultz wrote: > Since other subsystems (like regulator) have similar arbitrary > timeouts for how long they try to resolve driver dependencies, > rename deferred_probe_timeout to driver_deferred_probe_timeout > and set it as global, so it can be shared. > > Cc: Rob Herring <robh@kernel.org> > Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net> > Cc: Kevin Hilman <khilman@kernel.org> > Cc: Ulf Hansson <ulf.hansson@linaro.org> > Cc: Pavel Machek <pavel@ucw.cz> > Cc: Len Brown <len.brown@intel.com> > Cc: Todd Kjos <tkjos@google.com> > Cc: Bjorn Andersson <bjorn.andersson@linaro.org> > Cc: Liam Girdwood <lgirdwood@gmail.com> > Cc: Mark Brown <broonie@kernel.org> > Cc: Thierry Reding <treding@nvidia.com> > Cc: Linus Walleij <linus.walleij@linaro.org> > Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > Cc: linux-pm@vger.kernel.org > Signed-off-by: John Stultz <john.stultz@linaro.org> > Change-Id: I92ee3b392004ecc9217c5337b54eda48c2d7f3ee Change-Id... Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org> Regards, Bjorn > --- > v4: > * Split out into its own patch as suggested by Mark > * Renamed deferred_probe_timeout as suggested by Greg > --- > drivers/base/dd.c | 18 ++++++++++-------- > include/linux/device/driver.h | 1 + > 2 files changed, 11 insertions(+), 8 deletions(-) > > diff --git a/drivers/base/dd.c b/drivers/base/dd.c > index 408e4da081da..39f1ce6d4f1c 100644 > --- a/drivers/base/dd.c > +++ b/drivers/base/dd.c > @@ -229,17 +229,19 @@ DEFINE_SHOW_ATTRIBUTE(deferred_devs); > * In the case of modules, set the default probe timeout to > * 30 seconds to give userland some time to load needed modules > */ > -static int deferred_probe_timeout = 30; > +int driver_deferred_probe_timeout = 30; > #else > /* In the case of !modules, no probe timeout needed */ > -static int deferred_probe_timeout = -1; > +int driver_deferred_probe_timeout = -1; > #endif > +EXPORT_SYMBOL_GPL(driver_deferred_probe_timeout); > + > static int __init deferred_probe_timeout_setup(char *str) > { > int timeout; > > if (!kstrtoint(str, 10, &timeout)) > - deferred_probe_timeout = timeout; > + driver_deferred_probe_timeout = timeout; > return 1; > } > __setup("deferred_probe_timeout=", deferred_probe_timeout_setup); > @@ -259,10 +261,10 @@ __setup("deferred_probe_timeout=", deferred_probe_timeout_setup); > */ > int driver_deferred_probe_check_state(struct device *dev) > { > - if (!initcalls_done || deferred_probe_timeout > 0) > + if (!initcalls_done || driver_deferred_probe_timeout > 0) > return -EPROBE_DEFER; > > - if (!deferred_probe_timeout) { > + if (!driver_deferred_probe_timeout) { > dev_WARN(dev, "deferred probe timeout, ignoring dependency"); > return -ETIMEDOUT; > } > @@ -276,7 +278,7 @@ static void deferred_probe_timeout_work_func(struct work_struct *work) > { > struct device_private *private, *p; > > - deferred_probe_timeout = 0; > + driver_deferred_probe_timeout = 0; > driver_deferred_probe_trigger(); > flush_work(&deferred_probe_work); > > @@ -310,9 +312,9 @@ static int deferred_probe_initcall(void) > driver_deferred_probe_trigger(); > flush_work(&deferred_probe_work); > > - if (deferred_probe_timeout > 0) { > + if (driver_deferred_probe_timeout > 0) { > schedule_delayed_work(&deferred_probe_timeout_work, > - deferred_probe_timeout * HZ); > + driver_deferred_probe_timeout * HZ); > } > return 0; > } > diff --git a/include/linux/device/driver.h b/include/linux/device/driver.h > index 5242afabfaba..ee7ba5b5417e 100644 > --- a/include/linux/device/driver.h > +++ b/include/linux/device/driver.h > @@ -236,6 +236,7 @@ driver_find_device_by_acpi_dev(struct device_driver *drv, const void *adev) > } > #endif > > +extern int driver_deferred_probe_timeout; > void driver_deferred_probe_add(struct device *dev); > int driver_deferred_probe_check_state(struct device *dev); > void driver_init(void); > -- > 2.17.1 >
diff --git a/drivers/base/dd.c b/drivers/base/dd.c index 408e4da081da..39f1ce6d4f1c 100644 --- a/drivers/base/dd.c +++ b/drivers/base/dd.c @@ -229,17 +229,19 @@ DEFINE_SHOW_ATTRIBUTE(deferred_devs); * In the case of modules, set the default probe timeout to * 30 seconds to give userland some time to load needed modules */ -static int deferred_probe_timeout = 30; +int driver_deferred_probe_timeout = 30; #else /* In the case of !modules, no probe timeout needed */ -static int deferred_probe_timeout = -1; +int driver_deferred_probe_timeout = -1; #endif +EXPORT_SYMBOL_GPL(driver_deferred_probe_timeout); + static int __init deferred_probe_timeout_setup(char *str) { int timeout; if (!kstrtoint(str, 10, &timeout)) - deferred_probe_timeout = timeout; + driver_deferred_probe_timeout = timeout; return 1; } __setup("deferred_probe_timeout=", deferred_probe_timeout_setup); @@ -259,10 +261,10 @@ __setup("deferred_probe_timeout=", deferred_probe_timeout_setup); */ int driver_deferred_probe_check_state(struct device *dev) { - if (!initcalls_done || deferred_probe_timeout > 0) + if (!initcalls_done || driver_deferred_probe_timeout > 0) return -EPROBE_DEFER; - if (!deferred_probe_timeout) { + if (!driver_deferred_probe_timeout) { dev_WARN(dev, "deferred probe timeout, ignoring dependency"); return -ETIMEDOUT; } @@ -276,7 +278,7 @@ static void deferred_probe_timeout_work_func(struct work_struct *work) { struct device_private *private, *p; - deferred_probe_timeout = 0; + driver_deferred_probe_timeout = 0; driver_deferred_probe_trigger(); flush_work(&deferred_probe_work); @@ -310,9 +312,9 @@ static int deferred_probe_initcall(void) driver_deferred_probe_trigger(); flush_work(&deferred_probe_work); - if (deferred_probe_timeout > 0) { + if (driver_deferred_probe_timeout > 0) { schedule_delayed_work(&deferred_probe_timeout_work, - deferred_probe_timeout * HZ); + driver_deferred_probe_timeout * HZ); } return 0; } diff --git a/include/linux/device/driver.h b/include/linux/device/driver.h index 5242afabfaba..ee7ba5b5417e 100644 --- a/include/linux/device/driver.h +++ b/include/linux/device/driver.h @@ -236,6 +236,7 @@ driver_find_device_by_acpi_dev(struct device_driver *drv, const void *adev) } #endif +extern int driver_deferred_probe_timeout; void driver_deferred_probe_add(struct device *dev); int driver_deferred_probe_check_state(struct device *dev); void driver_init(void);
Since other subsystems (like regulator) have similar arbitrary timeouts for how long they try to resolve driver dependencies, rename deferred_probe_timeout to driver_deferred_probe_timeout and set it as global, so it can be shared. Cc: Rob Herring <robh@kernel.org> Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net> Cc: Kevin Hilman <khilman@kernel.org> Cc: Ulf Hansson <ulf.hansson@linaro.org> Cc: Pavel Machek <pavel@ucw.cz> Cc: Len Brown <len.brown@intel.com> Cc: Todd Kjos <tkjos@google.com> Cc: Bjorn Andersson <bjorn.andersson@linaro.org> Cc: Liam Girdwood <lgirdwood@gmail.com> Cc: Mark Brown <broonie@kernel.org> Cc: Thierry Reding <treding@nvidia.com> Cc: Linus Walleij <linus.walleij@linaro.org> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: linux-pm@vger.kernel.org Signed-off-by: John Stultz <john.stultz@linaro.org> Change-Id: I92ee3b392004ecc9217c5337b54eda48c2d7f3ee --- v4: * Split out into its own patch as suggested by Mark * Renamed deferred_probe_timeout as suggested by Greg --- drivers/base/dd.c | 18 ++++++++++-------- include/linux/device/driver.h | 1 + 2 files changed, 11 insertions(+), 8 deletions(-)