#include <linux/errno.h>
#include "base.h"
+
+int driver_for_each_dev(struct device_driver * drv, void * data, int (*callback)(struct device *, void * ))
+{
+ struct device * next;
+ struct device * dev = NULL;
+ struct list_head * node;
+ int error = 0;
+
+ get_driver(drv);
+ read_lock(&drv->lock);
+ node = drv->devices.next;
+ while (node != &drv->devices) {
+ next = list_entry(node,struct device,driver_list);
+ get_device(next);
+ read_unlock(&drv->lock);
+
+ if (dev)
+ put_device(dev);
+ dev = next;
+ if ((error = callback(dev,data))) {
+ put_device(dev);
+ break;
+ }
+ read_lock(&drv->lock);
+ node = dev->driver_list.next;
+ }
+ read_unlock(&drv->lock);
+ if (dev)
+ put_device(dev);
+ put_driver(drv);
+ return error;
+}
+
/**
* driver_make_dir - create a driverfs directory for a driver
* @drv: driver in question
drv->release(drv);
}
+EXPORT_SYMBOL(driver_for_each_dev);
EXPORT_SYMBOL(driver_register);
EXPORT_SYMBOL(put_driver);