diff options
| author | Kay Sievers <kay.sievers@suse.de> | 2006-04-04 14:42:26 -0400 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-06-21 15:40:47 -0400 |
| commit | 53877d06d53a412d901bb323f080296c363d8b51 (patch) | |
| tree | ceffbd4dd9342e1742bf59165880888f7f961f33 /drivers/base/bus.c | |
| parent | 27c0ff868f2ad3c9732ce45abbb8dd7e1723931f (diff) | |
[PATCH] Driver core: bus device event delay
split bus_add_device() and send device uevents after sysfs population
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/base/bus.c')
| -rw-r--r-- | drivers/base/bus.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/drivers/base/bus.c b/drivers/base/bus.c index 76656acd00d4..b27a6067e5a4 100644 --- a/drivers/base/bus.c +++ b/drivers/base/bus.c | |||
| @@ -362,8 +362,7 @@ static void device_remove_attrs(struct bus_type * bus, struct device * dev) | |||
| 362 | * @dev: device being added | 362 | * @dev: device being added |
| 363 | * | 363 | * |
| 364 | * - Add the device to its bus's list of devices. | 364 | * - Add the device to its bus's list of devices. |
| 365 | * - Try to attach to driver. | 365 | * - Create link to device's bus. |
| 366 | * - Create link to device's physical location. | ||
| 367 | */ | 366 | */ |
| 368 | int bus_add_device(struct device * dev) | 367 | int bus_add_device(struct device * dev) |
| 369 | { | 368 | { |
| @@ -372,8 +371,6 @@ int bus_add_device(struct device * dev) | |||
| 372 | 371 | ||
| 373 | if (bus) { | 372 | if (bus) { |
| 374 | pr_debug("bus %s: add device %s\n", bus->name, dev->bus_id); | 373 | pr_debug("bus %s: add device %s\n", bus->name, dev->bus_id); |
| 375 | device_attach(dev); | ||
| 376 | klist_add_tail(&dev->knode_bus, &bus->klist_devices); | ||
| 377 | error = device_add_attrs(bus, dev); | 374 | error = device_add_attrs(bus, dev); |
| 378 | if (!error) { | 375 | if (!error) { |
| 379 | sysfs_create_link(&bus->devices.kobj, &dev->kobj, dev->bus_id); | 376 | sysfs_create_link(&bus->devices.kobj, &dev->kobj, dev->bus_id); |
| @@ -384,6 +381,22 @@ int bus_add_device(struct device * dev) | |||
| 384 | } | 381 | } |
| 385 | 382 | ||
| 386 | /** | 383 | /** |
| 384 | * bus_attach_device - add device to bus | ||
| 385 | * @dev: device tried to attach to a driver | ||
| 386 | * | ||
| 387 | * - Try to attach to driver. | ||
| 388 | */ | ||
| 389 | void bus_attach_device(struct device * dev) | ||
| 390 | { | ||
| 391 | struct bus_type * bus = dev->bus; | ||
| 392 | |||
| 393 | if (bus) { | ||
| 394 | device_attach(dev); | ||
| 395 | klist_add_tail(&dev->knode_bus, &bus->klist_devices); | ||
| 396 | } | ||
| 397 | } | ||
| 398 | |||
| 399 | /** | ||
| 387 | * bus_remove_device - remove device from bus | 400 | * bus_remove_device - remove device from bus |
| 388 | * @dev: device to be removed | 401 | * @dev: device to be removed |
| 389 | * | 402 | * |
| @@ -733,6 +746,7 @@ EXPORT_SYMBOL_GPL(bus_find_device); | |||
| 733 | EXPORT_SYMBOL_GPL(bus_for_each_drv); | 746 | EXPORT_SYMBOL_GPL(bus_for_each_drv); |
| 734 | 747 | ||
| 735 | EXPORT_SYMBOL_GPL(bus_add_device); | 748 | EXPORT_SYMBOL_GPL(bus_add_device); |
| 749 | EXPORT_SYMBOL_GPL(bus_attach_device); | ||
| 736 | EXPORT_SYMBOL_GPL(bus_remove_device); | 750 | EXPORT_SYMBOL_GPL(bus_remove_device); |
| 737 | EXPORT_SYMBOL_GPL(bus_register); | 751 | EXPORT_SYMBOL_GPL(bus_register); |
| 738 | EXPORT_SYMBOL_GPL(bus_unregister); | 752 | EXPORT_SYMBOL_GPL(bus_unregister); |
