From: Alan Stern <[email protected]> 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 <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]> --- drivers/base/bus.c | 18 +----------------- drivers/base/driver.c | 16 +--------------- 2 files changed, 2 insertions(+), 32 deletions(-) diff --git a/drivers/base/bus.c b/drivers/base/bus.c index 636af53..12173d1 100644 --- a/drivers/base/bus.c +++ b/drivers/base/bus.c @@ -696,22 +696,6 @@ static void klist_devices_put(struct kli 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: bus. @@ -747,7 +731,7 @@ int bus_register(struct bus_type * bus) goto bus_drivers_fail; 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); pr_debug("bus type '%s' registered\n", bus->name); diff --git a/drivers/base/driver.c b/drivers/base/driver.c index 562600d..1214cbd 100644 --- a/drivers/base/driver.c +++ b/drivers/base/driver.c @@ -142,20 +142,6 @@ void put_driver(struct device_driver * d 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 * @drv: driver to register @@ -175,7 +161,7 @@ int driver_register(struct device_driver (drv->bus->shutdown && drv->shutdown)) { 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); return bus_add_driver(drv); } -- 1.4.2.1 - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
- Follow-Ups:
- References:
- [GIT PATCH] Driver Core patches for 2.6.18
- From: Greg KH <[email protected]>
- [PATCH 1/47] Documentation/ABI: devfs is not obsolete, but removed!
- From: Greg KH <[email protected]>
- [PATCH 2/47] deprecate PHYSDEV* keys
- From: Greg KH <[email protected]>
- [PATCH 3/47] class_device_create(): make fmt argument 'const char *'
- From: Greg KH <[email protected]>
- [PATCH 4/47] device_create(): make fmt argument 'const char *'
- From: Greg KH <[email protected]>
- [PATCH 5/47] Driver core: add const to class_create
- From: Greg KH <[email protected]>
- [PATCH 6/47] sysfs: Make poll behaviour consistent
- From: Greg KH <[email protected]>
- [PATCH 7/47] Debugfs: kernel-doc fixes for debugfs
- From: Greg KH <[email protected]>
- [PATCH 8/47] SYSFS: allow sysfs_create_link to create symlinks in the root of sysfs
- From: Greg KH <[email protected]>
- [PATCH 9/47] Suspend infrastructure cleanup and extension
- From: Greg KH <[email protected]>
- [PATCH 10/47] Suspend changes for PCI core
- From: Greg KH <[email protected]>
- [PATCH 11/47] make suspend quieter
- From: Greg KH <[email protected]>
- [PATCH 12/47] fix broken/dubious driver suspend() methods
- From: Greg KH <[email protected]>
- [PATCH 13/47] PM: define PM_EVENT_PRETHAW
- From: Greg KH <[email protected]>
- [PATCH 14/47] PM: PCI and IDE handle PM_EVENT_PRETHAW
- From: Greg KH <[email protected]>
- [PATCH 15/47] PM: video drivers and PM_EVENT_PRETHAW
- From: Greg KH <[email protected]>
- [PATCH 16/47] PM: USB HCDs use PM_EVENT_PRETHAW
- From: Greg KH <[email protected]>
- [PATCH 17/47] PM: issue PM_EVENT_PRETHAW
- From: Greg KH <[email protected]>
- [PATCH 18/47] updated Documentation/power/devices.txt
- From: Greg KH <[email protected]>
- [PATCH 19/47] PM: update docs for writing .../power/state
- From: Greg KH <[email protected]>
- [PATCH 20/47] PM: add kconfig option for deprecated .../power/state files
- From: Greg KH <[email protected]>
- [PATCH 22/47] PM: no suspend_prepare() phase
- From: Greg KH <[email protected]>
- [PATCH 23/47] PM: add /sys/power documentation to Documentation/ABI
- From: Greg KH <[email protected]>
- [PATCH 24/47] PM: device_suspend/resume may sleep
- From: Greg KH <[email protected]>
- [PATCH 25/47] PM: platform_bus and late_suspend/early_resume
- From: Greg KH <[email protected]>
- [PATCH 26/47] Driver core: add groups support to struct device
- From: Greg KH <[email protected]>
- [PATCH 27/47] Driver core: allow devices in classes to have no parent
- From: Greg KH <[email protected]>
- [PATCH 28/47] Driver core: add ability for classes to handle devices properly
- From: Greg KH <[email protected]>
- [PATCH 29/47] Driver core: add device_rename function
- From: Greg KH <[email protected]>
- [PATCH 30/47] Driver core: create devices/virtual/ tree
- From: Greg KH <[email protected]>
- [PATCH 31/47] Class: add support for class interfaces for devices
- From: Greg KH <[email protected]>
- [PATCH 32/47] Driver core: add ability for devices to create and remove bin files
- From: Greg KH <[email protected]>
- [PATCH 33/47] kobject: must_check fixes
- From: Greg KH <[email protected]>
- [PATCH 34/47] sysfs_remove_bin_file: no return value, dump_stack on error
- From: Greg KH <[email protected]>
- [PATCH 35/47] Driver core: fix comments in drivers/base/power/resume.c
- From: Greg KH <[email protected]>
- [PATCH 36/47] Driver core: fixed add_bind_files() definition
- From: Greg KH <[email protected]>
- [PATCH 37/47] add __must_check to device management code
- From: Greg KH <[email protected]>
- [PATCH 38/47] add CONFIG_ENABLE_MUST_CHECK
- From: Greg KH <[email protected]>
- [PATCH 39/47] v4l-dev2: handle __must_check
- From: Greg KH <[email protected]>
- [PATCH 40/47] drivers/base: Platform notify needs to occur before drivers attach to the device
- From: Greg KH <[email protected]>
- [PATCH 41/47] drivers/base: check errors
- From: Greg KH <[email protected]>
- [PATCH 43/47] Driver Core: add ability for drivers to do a threaded probe
- From: Greg KH <[email protected]>
- [PATCH 44/47] PCI: enable driver multi-threaded probe
- From: Greg KH <[email protected]>
- [PATCH 45/47] Driver core: Fix potential deadlock in driver core
- From: Greg KH <[email protected]>
- [GIT PATCH] Driver Core patches for 2.6.18
- Prev by Date: [PATCH 42/47] sysfs: add proper sysfs_init() prototype
- Next by Date: [PATCH 44/47] PCI: enable driver multi-threaded probe
- Previous by thread: [PATCH 45/47] Driver core: Fix potential deadlock in driver core
- Next by thread: [PATCH 47/47] Driver core: Don't call put methods while holding a spinlock
- Index(es):