|
@@ -28,7 +28,7 @@
|
|
|
|
|
|
static void driver_bound(struct device *dev)
|
|
static void driver_bound(struct device *dev)
|
|
{
|
|
{
|
|
- if (klist_node_attached(&dev->knode_driver)) {
|
|
|
|
|
|
+ if (klist_node_attached(&dev->p->knode_driver)) {
|
|
printk(KERN_WARNING "%s: device %s already bound\n",
|
|
printk(KERN_WARNING "%s: device %s already bound\n",
|
|
__func__, kobject_name(&dev->kobj));
|
|
__func__, kobject_name(&dev->kobj));
|
|
return;
|
|
return;
|
|
@@ -41,7 +41,7 @@ static void driver_bound(struct device *dev)
|
|
blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
|
|
blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
|
|
BUS_NOTIFY_BOUND_DRIVER, dev);
|
|
BUS_NOTIFY_BOUND_DRIVER, dev);
|
|
|
|
|
|
- klist_add_tail(&dev->knode_driver, &dev->driver->p->klist_devices);
|
|
|
|
|
|
+ klist_add_tail(&dev->p->knode_driver, &dev->driver->p->klist_devices);
|
|
}
|
|
}
|
|
|
|
|
|
static int driver_sysfs_add(struct device *dev)
|
|
static int driver_sysfs_add(struct device *dev)
|
|
@@ -311,7 +311,7 @@ static void __device_release_driver(struct device *dev)
|
|
drv->remove(dev);
|
|
drv->remove(dev);
|
|
devres_release_all(dev);
|
|
devres_release_all(dev);
|
|
dev->driver = NULL;
|
|
dev->driver = NULL;
|
|
- klist_remove(&dev->knode_driver);
|
|
|
|
|
|
+ klist_remove(&dev->p->knode_driver);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -341,6 +341,7 @@ EXPORT_SYMBOL_GPL(device_release_driver);
|
|
*/
|
|
*/
|
|
void driver_detach(struct device_driver *drv)
|
|
void driver_detach(struct device_driver *drv)
|
|
{
|
|
{
|
|
|
|
+ struct device_private *dev_prv;
|
|
struct device *dev;
|
|
struct device *dev;
|
|
|
|
|
|
for (;;) {
|
|
for (;;) {
|
|
@@ -349,8 +350,10 @@ void driver_detach(struct device_driver *drv)
|
|
spin_unlock(&drv->p->klist_devices.k_lock);
|
|
spin_unlock(&drv->p->klist_devices.k_lock);
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
- dev = list_entry(drv->p->klist_devices.k_list.prev,
|
|
|
|
- struct device, knode_driver.n_node);
|
|
|
|
|
|
+ dev_prv = list_entry(drv->p->klist_devices.k_list.prev,
|
|
|
|
+ struct device_private,
|
|
|
|
+ knode_driver.n_node);
|
|
|
|
+ dev = dev_prv->device;
|
|
get_device(dev);
|
|
get_device(dev);
|
|
spin_unlock(&drv->p->klist_devices.k_lock);
|
|
spin_unlock(&drv->p->klist_devices.k_lock);
|
|
|
|
|