forked from luck/tmp_suning_uos_patched
[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>
This commit is contained in:
parent
27c0ff868f
commit
53877d06d5
|
@ -11,6 +11,7 @@ extern int cpu_dev_init(void);
|
||||||
extern int attribute_container_init(void);
|
extern int attribute_container_init(void);
|
||||||
|
|
||||||
extern int bus_add_device(struct device * dev);
|
extern int bus_add_device(struct device * dev);
|
||||||
|
extern void bus_attach_device(struct device * dev);
|
||||||
extern void bus_remove_device(struct device * dev);
|
extern void bus_remove_device(struct device * dev);
|
||||||
|
|
||||||
extern int bus_add_driver(struct device_driver *);
|
extern int bus_add_driver(struct device_driver *);
|
||||||
|
|
|
@ -362,8 +362,7 @@ static void device_remove_attrs(struct bus_type * bus, struct device * dev)
|
||||||
* @dev: device being added
|
* @dev: device being added
|
||||||
*
|
*
|
||||||
* - Add the device to its bus's list of devices.
|
* - Add the device to its bus's list of devices.
|
||||||
* - Try to attach to driver.
|
* - Create link to device's bus.
|
||||||
* - Create link to device's physical location.
|
|
||||||
*/
|
*/
|
||||||
int bus_add_device(struct device * dev)
|
int bus_add_device(struct device * dev)
|
||||||
{
|
{
|
||||||
|
@ -372,8 +371,6 @@ int bus_add_device(struct device * dev)
|
||||||
|
|
||||||
if (bus) {
|
if (bus) {
|
||||||
pr_debug("bus %s: add device %s\n", bus->name, dev->bus_id);
|
pr_debug("bus %s: add device %s\n", bus->name, dev->bus_id);
|
||||||
device_attach(dev);
|
|
||||||
klist_add_tail(&dev->knode_bus, &bus->klist_devices);
|
|
||||||
error = device_add_attrs(bus, dev);
|
error = device_add_attrs(bus, dev);
|
||||||
if (!error) {
|
if (!error) {
|
||||||
sysfs_create_link(&bus->devices.kobj, &dev->kobj, dev->bus_id);
|
sysfs_create_link(&bus->devices.kobj, &dev->kobj, dev->bus_id);
|
||||||
|
@ -383,6 +380,22 @@ int bus_add_device(struct device * dev)
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* bus_attach_device - add device to bus
|
||||||
|
* @dev: device tried to attach to a driver
|
||||||
|
*
|
||||||
|
* - Try to attach to driver.
|
||||||
|
*/
|
||||||
|
void bus_attach_device(struct device * dev)
|
||||||
|
{
|
||||||
|
struct bus_type * bus = dev->bus;
|
||||||
|
|
||||||
|
if (bus) {
|
||||||
|
device_attach(dev);
|
||||||
|
klist_add_tail(&dev->knode_bus, &bus->klist_devices);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* bus_remove_device - remove device from bus
|
* bus_remove_device - remove device from bus
|
||||||
* @dev: device to be removed
|
* @dev: device to be removed
|
||||||
|
@ -733,6 +746,7 @@ EXPORT_SYMBOL_GPL(bus_find_device);
|
||||||
EXPORT_SYMBOL_GPL(bus_for_each_drv);
|
EXPORT_SYMBOL_GPL(bus_for_each_drv);
|
||||||
|
|
||||||
EXPORT_SYMBOL_GPL(bus_add_device);
|
EXPORT_SYMBOL_GPL(bus_add_device);
|
||||||
|
EXPORT_SYMBOL_GPL(bus_attach_device);
|
||||||
EXPORT_SYMBOL_GPL(bus_remove_device);
|
EXPORT_SYMBOL_GPL(bus_remove_device);
|
||||||
EXPORT_SYMBOL_GPL(bus_register);
|
EXPORT_SYMBOL_GPL(bus_register);
|
||||||
EXPORT_SYMBOL_GPL(bus_unregister);
|
EXPORT_SYMBOL_GPL(bus_unregister);
|
||||||
|
|
|
@ -274,11 +274,12 @@ int device_add(struct device *dev)
|
||||||
dev->uevent_attr.store = store_uevent;
|
dev->uevent_attr.store = store_uevent;
|
||||||
device_create_file(dev, &dev->uevent_attr);
|
device_create_file(dev, &dev->uevent_attr);
|
||||||
|
|
||||||
kobject_uevent(&dev->kobj, KOBJ_ADD);
|
|
||||||
if ((error = device_pm_add(dev)))
|
if ((error = device_pm_add(dev)))
|
||||||
goto PMError;
|
goto PMError;
|
||||||
if ((error = bus_add_device(dev)))
|
if ((error = bus_add_device(dev)))
|
||||||
goto BusError;
|
goto BusError;
|
||||||
|
kobject_uevent(&dev->kobj, KOBJ_ADD);
|
||||||
|
bus_attach_device(dev);
|
||||||
if (parent)
|
if (parent)
|
||||||
klist_add_tail(&dev->knode_parent, &parent->klist_children);
|
klist_add_tail(&dev->knode_parent, &parent->klist_children);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user