diff options
author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2015-03-30 16:20:07 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2015-05-20 00:25:25 -0700 |
commit | 5c36eb2a9ecc0bc5228451b1eeb83e70b6bb7473 (patch) | |
tree | 5d5f051418a625460526c6c4128944697bbd247a | |
parent | d173a137c5bd95ee29d02705e5fa8890ef149718 (diff) | |
download | op-kernel-dev-5c36eb2a9ecc0bc5228451b1eeb83e70b6bb7473.zip op-kernel-dev-5c36eb2a9ecc0bc5228451b1eeb83e70b6bb7473.tar.gz |
driver-core: platform_driver_probe() must probe synchronously
Because platform_driver_probe() checks, after trying to register driver,
if there are any devices that driver successfully bound to, driver's
probe routine must be run synchronously.
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/base/platform.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/base/platform.c b/drivers/base/platform.c index ebf034b..063f0ab 100644 --- a/drivers/base/platform.c +++ b/drivers/base/platform.c @@ -613,6 +613,19 @@ int __init_or_module __platform_driver_probe(struct platform_driver *drv, { int retval, code; + if (drv->driver.probe_type == PROBE_PREFER_ASYNCHRONOUS) { + pr_err("%s: drivers registered with %s can not be probed asynchronously\n", + drv->driver.name, __func__); + return -EINVAL; + } + + /* + * We have to run our probes synchronously because we check if + * we find any devices to bind to and exit with error if there + * are any. + */ + drv->driver.probe_type = PROBE_FORCE_SYNCHRONOUS; + /* * Prevent driver from requesting probe deferral to avoid further * futile probe attempts. |