Commit 32a8121a authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman
Browse files

driver core: bus: bus_register/unregister_notifier() cleanups

Convert the bus_register_notifier() and bus_unregister_notifier() public
functions to use bus_to_subsys() and not use the back-pointer to the
private structure as well as the bus_notify() function.

Cc: "Rafael J. Wysocki" <rafael@kernel.org>
Link: https://lore.kernel.org/r/20230208111330.439504-11-gregkh@linuxfoundation.org


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent beea7892
Loading
Loading
Loading
Loading
+23 −5
Original line number Diff line number Diff line
@@ -936,22 +936,40 @@ EXPORT_SYMBOL_GPL(bus_unregister);

int bus_register_notifier(struct bus_type *bus, struct notifier_block *nb)
{
	return blocking_notifier_chain_register(&bus->p->bus_notifier, nb);
	struct subsys_private *sp = bus_to_subsys(bus);
	int retval;

	if (!sp)
		return -EINVAL;

	retval = blocking_notifier_chain_register(&sp->bus_notifier, nb);
	subsys_put(sp);
	return retval;
}
EXPORT_SYMBOL_GPL(bus_register_notifier);

int bus_unregister_notifier(struct bus_type *bus, struct notifier_block *nb)
{
	return blocking_notifier_chain_unregister(&bus->p->bus_notifier, nb);
	struct subsys_private *sp = bus_to_subsys(bus);
	int retval;

	if (!sp)
		return -EINVAL;
	retval = blocking_notifier_chain_unregister(&sp->bus_notifier, nb);
	subsys_put(sp);
	return retval;
}
EXPORT_SYMBOL_GPL(bus_unregister_notifier);

void bus_notify(struct device *dev, enum bus_notifier_event value)
{
	struct bus_type *bus = dev->bus;
	struct subsys_private *sp = bus_to_subsys(dev->bus);

	if (bus)
		blocking_notifier_call_chain(&bus->p->bus_notifier, value, dev);
	if (!sp)
		return;

	blocking_notifier_call_chain(&sp->bus_notifier, value, dev);
	subsys_put(sp);
}

struct kset *bus_get_kset(struct bus_type *bus)