History

driver core: move driver_find() to bus.c

This function really is a bus function, not a driver one, so move it from driver.c to bus.c so that we can clean up some internal bus logic easier.

Greg Kroah-Hartman committed 3 years ago

Commit adc18501 parent b5aaecb2 files · +27 −27Browse files

Unified · Split

2 files
  1. drivers/base/bus.c +27 −0
  2. drivers/base/driver.c +0 −27
drivers/base/bus.c+27−0
@@ -1288,6 +1288,33 @@ int subsys_virtual_register(struct bus_type *subsys, · 1287 unmodified lines
12881288 }
12891289 EXPORT_SYMBOL_GPL(subsys_virtual_register);
12901290
1291+/**
1292+ * driver_find - locate driver on a bus by its name.
1293+ * @name: name of the driver.
1294+ * @bus: bus to scan for the driver.
1295+ *
1296+ * Call kset_find_obj() to iterate over list of drivers on
1297+ * a bus to find driver by name. Return driver if found.
1298+ *
1299+ * This routine provides no locking to prevent the driver it returns
1300+ * from being unregistered or unloaded while the caller is using it.
1301+ * The caller is responsible for preventing this.
1302+ */
1303+struct device_driver *driver_find(const char *name, struct bus_type *bus)
1304+{
1305+ struct kobject *k = kset_find_obj(bus->p->drivers_kset, name);
1306+ struct driver_private *priv;
1307+
1308+ if (k) {
1309+ /* Drop reference added by kset_find_obj() */
1310+ kobject_put(k);
1311+ priv = to_driver(k);
1312+ return priv->driver;
1313+ }
1314+ return NULL;
1315+}
1316+EXPORT_SYMBOL_GPL(driver_find);
1317+
12911318 int __init buses_init(void)
12921319 {
12931320 bus_kset = kset_create_and_add("bus", &bus_uevent_ops, NULL);
drivers/base/driver.c+0−27
@@ -274,30 +274,3 @@ void driver_unregister(struct device_driver *drv) · 273 unmodified lines
274274 bus_remove_driver(drv);
275275 }
276276 EXPORT_SYMBOL_GPL(driver_unregister);
277−
278−/**
279− * driver_find - locate driver on a bus by its name.
280− * @name: name of the driver.
281− * @bus: bus to scan for the driver.
282− *
283− * Call kset_find_obj() to iterate over list of drivers on
284− * a bus to find driver by name. Return driver if found.
285− *
286− * This routine provides no locking to prevent the driver it returns
287− * from being unregistered or unloaded while the caller is using it.
288− * The caller is responsible for preventing this.
289− */
290−struct device_driver *driver_find(const char *name, struct bus_type *bus)
291−{
292− struct kobject *k = kset_find_obj(bus->p->drivers_kset, name);
293− struct driver_private *priv;
294−
295− if (k) {
296− /* Drop reference added by kset_find_obj() */
297− kobject_put(k);
298− priv = to_driver(k);
299− return priv->driver;
300− }
301− return NULL;
302−}
303−EXPORT_SYMBOL_GPL(driver_find);