mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-17 10:26:09 +00:00
driver core: create bus_is_registered()
A local function to the driver core to determine if a bus really is registered with the kernel or not. To be used only by the driver core code, as part of the driver registration path as it's not really "safe" because the bus could be unregistered instantly after being called. Cc: "Rafael J. Wysocki" <rafael@kernel.org> Link: https://lore.kernel.org/r/20230208111330.439504-17-gregkh@linuxfoundation.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
fb451966ae
commit
63b823d7d3
@ -146,6 +146,7 @@ extern int bus_add_device(struct device *dev);
|
||||
extern void bus_probe_device(struct device *dev);
|
||||
extern void bus_remove_device(struct device *dev);
|
||||
void bus_notify(struct device *dev, enum bus_notifier_event value);
|
||||
bool bus_is_registered(const struct bus_type *bus);
|
||||
|
||||
extern int bus_add_driver(struct device_driver *drv);
|
||||
extern void bus_remove_driver(struct device_driver *drv);
|
||||
|
@ -1322,6 +1322,22 @@ struct device_driver *driver_find(const char *name, struct bus_type *bus)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(driver_find);
|
||||
|
||||
/*
|
||||
* Warning, the value could go to "removed" instantly after calling this function, so be very
|
||||
* careful when calling it...
|
||||
*/
|
||||
bool bus_is_registered(const struct bus_type *bus)
|
||||
{
|
||||
struct subsys_private *sp = bus_to_subsys(bus);
|
||||
bool is_initialized = false;
|
||||
|
||||
if (sp) {
|
||||
is_initialized = true;
|
||||
subsys_put(sp);
|
||||
}
|
||||
return is_initialized;
|
||||
}
|
||||
|
||||
int __init buses_init(void)
|
||||
{
|
||||
bus_kset = kset_create_and_add("bus", &bus_uevent_ops, NULL);
|
||||
|
@ -224,7 +224,7 @@ int driver_register(struct device_driver *drv)
|
||||
int ret;
|
||||
struct device_driver *other;
|
||||
|
||||
if (!drv->bus->p) {
|
||||
if (!bus_is_registered(drv->bus)) {
|
||||
pr_err("Driver '%s' was unable to register with bus_type '%s' because the bus was not initialized.\n",
|
||||
drv->name, drv->bus->name);
|
||||
return -EINVAL;
|
||||
|
Loading…
x
Reference in New Issue
Block a user