Skip to content

Commit

Permalink
driver core: bus: bus iterator cleanups
Browse files Browse the repository at this point in the history
Convert the bus_for_each_dev(), bus_find_device, and bus_for_each_drv()
functions to use bus_to_subsys() and not use the back-pointer to the
private structure.

Cc: "Rafael J. Wysocki" <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Greg Kroah-Hartman <[email protected]>
  • Loading branch information
gregkh committed Feb 9, 2023
1 parent e4f0568 commit 83b9148
Showing 1 changed file with 12 additions and 6 deletions.
18 changes: 12 additions & 6 deletions drivers/base/bus.c
Original file line number Diff line number Diff line change
Expand Up @@ -355,18 +355,20 @@ static struct device *next_device(struct klist_iter *i)
int bus_for_each_dev(const struct bus_type *bus, struct device *start,
void *data, int (*fn)(struct device *, void *))
{
struct subsys_private *sp = bus_to_subsys(bus);
struct klist_iter i;
struct device *dev;
int error = 0;

if (!bus || !bus->p)
if (!sp)
return -EINVAL;

klist_iter_init_node(&bus->p->klist_devices, &i,
klist_iter_init_node(&sp->klist_devices, &i,
(start ? &start->p->knode_bus : NULL));
while (!error && (dev = next_device(&i)))
error = fn(dev, data);
klist_iter_exit(&i);
subsys_put(sp);
return error;
}
EXPORT_SYMBOL_GPL(bus_for_each_dev);
Expand All @@ -390,18 +392,20 @@ struct device *bus_find_device(const struct bus_type *bus,
struct device *start, const void *data,
int (*match)(struct device *dev, const void *data))
{
struct subsys_private *sp = bus_to_subsys(bus);
struct klist_iter i;
struct device *dev;

if (!bus || !bus->p)
if (!sp)
return NULL;

klist_iter_init_node(&bus->p->klist_devices, &i,
klist_iter_init_node(&sp->klist_devices, &i,
(start ? &start->p->knode_bus : NULL));
while ((dev = next_device(&i)))
if (match(dev, data) && get_device(dev))
break;
klist_iter_exit(&i);
subsys_put(sp);
return dev;
}
EXPORT_SYMBOL_GPL(bus_find_device);
Expand Down Expand Up @@ -440,18 +444,20 @@ static struct device_driver *next_driver(struct klist_iter *i)
int bus_for_each_drv(const struct bus_type *bus, struct device_driver *start,
void *data, int (*fn)(struct device_driver *, void *))
{
struct subsys_private *sp = bus_to_subsys(bus);
struct klist_iter i;
struct device_driver *drv;
int error = 0;

if (!bus)
if (!sp)
return -EINVAL;

klist_iter_init_node(&bus->p->klist_drivers, &i,
klist_iter_init_node(&sp->klist_drivers, &i,
start ? &start->p->knode_bus : NULL);
while ((drv = next_driver(&i)) && !error)
error = fn(drv, data);
klist_iter_exit(&i);
subsys_put(sp);
return error;
}
EXPORT_SYMBOL_GPL(bus_for_each_drv);
Expand Down

0 comments on commit 83b9148

Please sign in to comment.