aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMing Lei <tom.leiming@gmail.com>2009-02-21 16:45:07 +0800
committerGreg Kroah-Hartman <gregkh@suse.de>2009-03-24 16:38:25 -0700
commitb23530ebc339c4092ae2c9f37341a5398fea8b89 (patch)
treec8f45452c649273271ac292715d4a76baa5e9148
parent04256b4a8fc73f54cd14f20867882c299728a446 (diff)
downloadmrst-s0i3-test-b23530ebc339c4092ae2c9f37341a5398fea8b89.tar.gz
mrst-s0i3-test-b23530ebc339c4092ae2c9f37341a5398fea8b89.tar.xz
mrst-s0i3-test-b23530ebc339c4092ae2c9f37341a5398fea8b89.zip
driver core: remove polling for driver_probe_done(v5)
This patch removes 100ms polling for driver_probe_done in wait_for_device_probe(), and uses wait_event() instead. Removing polling in fs initialization may lead to a faster boot. This patch also changes the return type of wait_for_device_done() from int to void. This patch is against Arjan's patch in linux-next tree. Signed-off-by: Ming Lei <tom.leiming@gmail.com> Acked-by: Cornelia Huck <cornelia.huck@de.ibm.com> Reviewed-by: Arjan van de Ven <arjan@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--drivers/base/dd.c8
-rw-r--r--include/linux/device.h2
2 files changed, 3 insertions, 7 deletions
diff --git a/drivers/base/dd.c b/drivers/base/dd.c
index 3f32df7ed37..0dfd08c1592 100644
--- a/drivers/base/dd.c
+++ b/drivers/base/dd.c
@@ -172,16 +172,12 @@ int driver_probe_done(void)
/**
* wait_for_device_probe
* Wait for device probing to be completed.
- *
- * Note: this function polls at 100 msec intervals.
*/
-int wait_for_device_probe(void)
+void wait_for_device_probe(void)
{
/* wait for the known devices to complete their probing */
- while (driver_probe_done() != 0)
- msleep(100);
+ wait_event(probe_waitqueue, atomic_read(&probe_count) == 0);
async_synchronize_full();
- return 0;
}
/**
diff --git a/include/linux/device.h b/include/linux/device.h
index d5706c448bc..c56b154a0bf 100644
--- a/include/linux/device.h
+++ b/include/linux/device.h
@@ -147,7 +147,7 @@ extern void put_driver(struct device_driver *drv);
extern struct device_driver *driver_find(const char *name,
struct bus_type *bus);
extern int driver_probe_done(void);
-extern int wait_for_device_probe(void);
+extern void wait_for_device_probe(void);
/* sysfs interface for exporting driver attributes */