Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 81107bf5 authored by Alan Stern's avatar Alan Stern Committed by Greg Kroah-Hartman
Browse files

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: default avatarAlan Stern <stern@rowland.harvard.edu>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent f2eaae19
Loading
Loading
Loading
Loading
+1 −17
Original line number Diff line number Diff line
@@ -696,22 +696,6 @@ static void klist_devices_put(struct klist_node *n)
	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);
+1 −15
Original line number Diff line number Diff line
@@ -142,20 +142,6 @@ void put_driver(struct device_driver * drv)
	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)
	    (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);
}