|
@@ -245,6 +245,10 @@ int device_attach(struct device *dev)
|
|
|
|
|
|
device_lock(dev);
|
|
|
if (dev->driver) {
|
|
|
+ if (klist_node_attached(&dev->p->knode_driver)) {
|
|
|
+ ret = 1;
|
|
|
+ goto out_unlock;
|
|
|
+ }
|
|
|
ret = device_bind_driver(dev);
|
|
|
if (ret == 0)
|
|
|
ret = 1;
|
|
@@ -257,6 +261,7 @@ int device_attach(struct device *dev)
|
|
|
ret = bus_for_each_drv(dev->bus, NULL, dev, __device_attach);
|
|
|
pm_runtime_put_sync(dev);
|
|
|
}
|
|
|
+out_unlock:
|
|
|
device_unlock(dev);
|
|
|
return ret;
|
|
|
}
|