Messages in this thread | | | Date | Mon, 14 May 2018 21:46:42 -0700 | From | Guenter Roeck <> | Subject | Re: [PATCH] driver core: Respect all error codes from dev_pm_domain_attach() |
| |
On Thu, Apr 26, 2018 at 10:53:06AM +0200, Ulf Hansson wrote: > The limitation of being able to check only for -EPROBE_DEFER from > dev_pm_domain_attach() has been removed. Hence let's respect all error > codes and bail out accordingly. >
AFAICS this patch causes all drivers/devices to fail instantiating if dev_pm_domain_set() is called in the device initialization path. That seems to be a systemic problem, since dev_pm_domain_set() must only be called for unbound devices.
In practice, I see the problem when trying to boot beagle or overo with qemu (the Linaro version). Of course, that doesn't mean much because that is not real hardware. However, I am not surprised that all devices instantiated through, for example, omap_device_build_from_dt() fail to instantiate. Instrumentation confirms that dev_pm_domain_set() is called prior to platform_drv_probe().
Guenter
> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> > Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > --- > drivers/base/platform.c | 17 ++++++++--------- > 1 file changed, 8 insertions(+), 9 deletions(-) > > diff --git a/drivers/base/platform.c b/drivers/base/platform.c > index 8075ddc70a17..9460139d9b02 100644 > --- a/drivers/base/platform.c > +++ b/drivers/base/platform.c > @@ -572,17 +572,16 @@ static int platform_drv_probe(struct device *_dev) > return ret; > > ret = dev_pm_domain_attach(_dev, true); > - if (ret != -EPROBE_DEFER) { > - if (drv->probe) { > - ret = drv->probe(dev); > - if (ret) > - dev_pm_domain_detach(_dev, true); > - } else { > - /* don't fail if just dev_pm_domain_attach failed */ > - ret = 0; > - } > + if (ret) > + goto out; > + > + if (drv->probe) { > + ret = drv->probe(dev); > + if (ret) > + dev_pm_domain_detach(_dev, true); > } > > +out: > if (drv->prevent_deferred_probe && ret == -EPROBE_DEFER) { > dev_warn(_dev, "probe deferral not supported\n"); > ret = -ENXIO; > -- > 2.7.4
| |