PM / Sleep: Prevent waiting forever on asynchronous suspend after abort
[linux-2.6.git] / drivers / base / base.h
index 7a6ae42..6ee17bb 100644 (file)
@@ -59,6 +59,10 @@ struct driver_private {
  * @knode_parent - node in sibling list
  * @knode_driver - node in driver list
  * @knode_bus - node in bus list
+ * @deferred_probe - entry in deferred_probe_list which is used to retry the
+ *     binding of drivers which were unable to get all the resources needed by
+ *     the device; typically because it depends on another driver getting
+ *     probed first.
  * @driver_data - private pointer for driver specific info.  Will turn into a
  * list soon.
  * @device - pointer back to the struct class that this structure is
@@ -71,6 +75,7 @@ struct device_private {
        struct klist_node knode_parent;
        struct klist_node knode_driver;
        struct klist_node knode_bus;
+       struct list_head deferred_probe;
        void *driver_data;
        struct device *device;
 };
@@ -94,7 +99,7 @@ extern int hypervisor_init(void);
 static inline int hypervisor_init(void) { return 0; }
 #endif
 extern int platform_bus_init(void);
-extern int cpu_dev_init(void);
+extern void cpu_dev_init(void);
 
 extern int bus_add_device(struct device *dev);
 extern void bus_probe_device(struct device *dev);
@@ -105,6 +110,7 @@ extern void bus_remove_driver(struct device_driver *drv);
 
 extern void driver_detach(struct device_driver *drv);
 extern int driver_probe_device(struct device_driver *drv, struct device *dev);
+extern void driver_deferred_probe_del(struct device *dev);
 static inline int driver_match_device(struct device_driver *drv,
                                      struct device *dev)
 {