|
@@ -16,6 +16,7 @@
|
|
|
* Copyright (c) 2007-2009 Novell Inc.
|
|
|
*/
|
|
|
|
|
|
+#include <linux/debugfs.h>
|
|
|
#include <linux/device.h>
|
|
|
#include <linux/delay.h>
|
|
|
#include <linux/dma-mapping.h>
|
|
@@ -53,6 +54,7 @@ static DEFINE_MUTEX(deferred_probe_mutex);
|
|
|
static LIST_HEAD(deferred_probe_pending_list);
|
|
|
static LIST_HEAD(deferred_probe_active_list);
|
|
|
static atomic_t deferred_trigger_count = ATOMIC_INIT(0);
|
|
|
+static struct dentry *deferred_devices;
|
|
|
|
|
|
/*
|
|
|
* In some cases, like suspend to RAM or hibernation, It might be reasonable
|
|
@@ -199,6 +201,24 @@ void device_unblock_probing(void)
|
|
|
driver_deferred_probe_trigger();
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+ * deferred_devs_show() - Show the devices in the deferred probe pending list.
|
|
|
+ */
|
|
|
+static int deferred_devs_show(struct seq_file *s, void *data)
|
|
|
+{
|
|
|
+ struct device_private *curr;
|
|
|
+
|
|
|
+ mutex_lock(&deferred_probe_mutex);
|
|
|
+
|
|
|
+ list_for_each_entry(curr, &deferred_probe_pending_list, deferred_probe)
|
|
|
+ seq_printf(s, "%s\n", dev_name(curr->device));
|
|
|
+
|
|
|
+ mutex_unlock(&deferred_probe_mutex);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+DEFINE_SHOW_ATTRIBUTE(deferred_devs);
|
|
|
+
|
|
|
/**
|
|
|
* deferred_probe_initcall() - Enable probing of deferred devices
|
|
|
*
|
|
@@ -208,6 +228,9 @@ void device_unblock_probing(void)
|
|
|
*/
|
|
|
static int deferred_probe_initcall(void)
|
|
|
{
|
|
|
+ deferred_devices = debugfs_create_file("devices_deferred", 0444, NULL,
|
|
|
+ NULL, &deferred_devs_fops);
|
|
|
+
|
|
|
driver_deferred_probe_enable = true;
|
|
|
driver_deferred_probe_trigger();
|
|
|
/* Sort as many dependencies as possible before exiting initcalls */
|
|
@@ -216,6 +239,12 @@ static int deferred_probe_initcall(void)
|
|
|
}
|
|
|
late_initcall(deferred_probe_initcall);
|
|
|
|
|
|
+static void __exit deferred_probe_exit(void)
|
|
|
+{
|
|
|
+ debugfs_remove_recursive(deferred_devices);
|
|
|
+}
|
|
|
+__exitcall(deferred_probe_exit);
|
|
|
+
|
|
|
/**
|
|
|
* device_is_bound() - Check if device is bound to a driver
|
|
|
* @dev: device to check
|