mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-02 23:27:06 +00:00
Driver core: Remove unneeded routines from driver core
This patch (as783) simplifies the driver core slightly by removing four unnecessary _get and _put methods. It is vital that when a driver is removed from its bus's klist of registered drivers, or when a device is removed from a driver's klist of bound devices, that the klist updates complete synchronously. Otherwise the kernel might try binding an unregistered driver to a newly-registered device, or adding a device to the klist for a new driver before it has been removed from the old driver's klist. Since the removals must be synchronous, they don't need to update any reference counts. Hence the _get and _put methods can be dispensed with. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
f2eaae197f
commit
81107bf531
2 changed files with 2 additions and 32 deletions
|
@ -696,22 +696,6 @@ static void klist_devices_put(struct klist_node *n)
|
||||||
put_device(dev);
|
put_device(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void klist_drivers_get(struct klist_node *n)
|
|
||||||
{
|
|
||||||
struct device_driver *drv = container_of(n, struct device_driver,
|
|
||||||
knode_bus);
|
|
||||||
|
|
||||||
get_driver(drv);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void klist_drivers_put(struct klist_node *n)
|
|
||||||
{
|
|
||||||
struct device_driver *drv = container_of(n, struct device_driver,
|
|
||||||
knode_bus);
|
|
||||||
|
|
||||||
put_driver(drv);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* bus_register - register a bus with the system.
|
* bus_register - register a bus with the system.
|
||||||
* @bus: bus.
|
* @bus: bus.
|
||||||
|
@ -747,7 +731,7 @@ int bus_register(struct bus_type * bus)
|
||||||
goto bus_drivers_fail;
|
goto bus_drivers_fail;
|
||||||
|
|
||||||
klist_init(&bus->klist_devices, klist_devices_get, klist_devices_put);
|
klist_init(&bus->klist_devices, klist_devices_get, klist_devices_put);
|
||||||
klist_init(&bus->klist_drivers, klist_drivers_get, klist_drivers_put);
|
klist_init(&bus->klist_drivers, NULL, NULL);
|
||||||
bus_add_attrs(bus);
|
bus_add_attrs(bus);
|
||||||
|
|
||||||
pr_debug("bus type '%s' registered\n", bus->name);
|
pr_debug("bus type '%s' registered\n", bus->name);
|
||||||
|
|
|
@ -142,20 +142,6 @@ void put_driver(struct device_driver * drv)
|
||||||
kobject_put(&drv->kobj);
|
kobject_put(&drv->kobj);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void klist_devices_get(struct klist_node *n)
|
|
||||||
{
|
|
||||||
struct device *dev = container_of(n, struct device, knode_driver);
|
|
||||||
|
|
||||||
get_device(dev);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void klist_devices_put(struct klist_node *n)
|
|
||||||
{
|
|
||||||
struct device *dev = container_of(n, struct device, knode_driver);
|
|
||||||
|
|
||||||
put_device(dev);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* driver_register - register driver with bus
|
* driver_register - register driver with bus
|
||||||
* @drv: driver to register
|
* @drv: driver to register
|
||||||
|
@ -175,7 +161,7 @@ int driver_register(struct device_driver * drv)
|
||||||
(drv->bus->shutdown && drv->shutdown)) {
|
(drv->bus->shutdown && drv->shutdown)) {
|
||||||
printk(KERN_WARNING "Driver '%s' needs updating - please use bus_type methods\n", drv->name);
|
printk(KERN_WARNING "Driver '%s' needs updating - please use bus_type methods\n", drv->name);
|
||||||
}
|
}
|
||||||
klist_init(&drv->klist_devices, klist_devices_get, klist_devices_put);
|
klist_init(&drv->klist_devices, NULL, NULL);
|
||||||
init_completion(&drv->unloaded);
|
init_completion(&drv->unloaded);
|
||||||
return bus_add_driver(drv);
|
return bus_add_driver(drv);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue