mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-01-18 23:59:53 +00:00
[PATCH] driver core: fix error handling in bus_add_device
The error handling in bus_add_device() and device_attach() is simply non-existing. This patch propagates any error from device_attach to the upper layers to allow for a proper recovery. From: Hannes Reinecke <hare@suse.de> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
acaefc25d2
commit
ca2b94ba12
@ -270,11 +270,14 @@ int bus_add_device(struct device * dev)
|
||||
|
||||
if (bus) {
|
||||
pr_debug("bus %s: add device %s\n", bus->name, dev->bus_id);
|
||||
device_attach(dev);
|
||||
error = device_attach(dev);
|
||||
klist_add_tail(&bus->klist_devices, &dev->knode_bus);
|
||||
device_add_attrs(bus, dev);
|
||||
sysfs_create_link(&bus->devices.kobj, &dev->kobj, dev->bus_id);
|
||||
sysfs_create_link(&dev->kobj, &dev->bus->subsys.kset.kobj, "bus");
|
||||
if (error >= 0)
|
||||
error = device_add_attrs(bus, dev);
|
||||
if (!error) {
|
||||
sysfs_create_link(&bus->devices.kobj, &dev->kobj, dev->bus_id);
|
||||
sysfs_create_link(&dev->kobj, &dev->bus->subsys.kset.kobj, "bus");
|
||||
}
|
||||
}
|
||||
return error;
|
||||
}
|
||||
@ -394,7 +397,7 @@ static int bus_rescan_devices_helper(struct device *dev, void *data)
|
||||
{
|
||||
int *count = data;
|
||||
|
||||
if (!dev->driver && device_attach(dev))
|
||||
if (!dev->driver && (device_attach(dev) > 0))
|
||||
(*count)++;
|
||||
|
||||
return 0;
|
||||
|
@ -119,7 +119,8 @@ static int __device_attach(struct device_driver * drv, void * data)
|
||||
* driver_probe_device() for each pair. If a compatible
|
||||
* pair is found, break out and return.
|
||||
*
|
||||
* Returns 1 if the device was bound to a driver; 0 otherwise.
|
||||
* Returns 1 if the device was bound to a driver;
|
||||
* 0 if no matching device was found; error code otherwise.
|
||||
*/
|
||||
int device_attach(struct device * dev)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user