summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/base/dd.c14
-rw-r--r--include/linux/device.h13
2 files changed, 17 insertions, 10 deletions
diff --git a/drivers/base/dd.c b/drivers/base/dd.c
index 7a2fa5dcead7..39292535c74e 100644
--- a/drivers/base/dd.c
+++ b/drivers/base/dd.c
@@ -419,13 +419,19 @@ int driver_probe_device(struct device_driver *drv, struct device *dev)
bool driver_allows_async_probing(struct device_driver *drv)
{
- if (drv->probe_type == PROBE_PREFER_ASYNCHRONOUS)
+ switch (drv->probe_type) {
+ case PROBE_PREFER_ASYNCHRONOUS:
return true;
- if (drv->owner && drv->owner->async_probe_requested)
- return true;
+ case PROBE_FORCE_SYNCHRONOUS:
+ return false;
+
+ default:
+ if (drv->owner && drv->owner->async_probe_requested)
+ return true;
- return false;
+ return false;
+ }
}
struct device_attach_data {
diff --git a/include/linux/device.h b/include/linux/device.h
index 77b7cd9e5467..00ac57c26615 100644
--- a/include/linux/device.h
+++ b/include/linux/device.h
@@ -201,15 +201,15 @@ extern struct klist *bus_get_device_klist(struct bus_type *bus);
* respective probe routines. This tells the core what to
* expect and prefer.
*
- * @PROBE_DEFAULT_STRATEGY: Drivers expect their probe routines
- * to run synchronously with driver and device registration
- * (with the exception of -EPROBE_DEFER handling - re-probing
- * always ends up being done asynchronously) unless user
- * explicitly requested asynchronous probing via module
- * parameter.
+ * @PROBE_DEFAULT_STRATEGY: Used by drivers that work equally well
+ * whether probed synchronously or asynchronously.
* @PROBE_PREFER_ASYNCHRONOUS: Drivers for "slow" devices which
* probing order is not essential for booting the system may
* opt into executing their probes asynchronously.
+ * @PROBE_FORCE_SYNCHRONOUS: Use this to annotate drivers that need
+ * their probe routines to run synchronously with driver and
+ * device registration (with the exception of -EPROBE_DEFER
+ * handling - re-probing always ends up being done asynchronously).
*
* Note that the end goal is to switch the kernel to use asynchronous
* probing by default, so annotating drivers with
@@ -220,6 +220,7 @@ extern struct klist *bus_get_device_klist(struct bus_type *bus);
enum probe_type {
PROBE_DEFAULT_STRATEGY,
PROBE_PREFER_ASYNCHRONOUS,
+ PROBE_FORCE_SYNCHRONOUS,
};
/**