]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
pmdomain: core: switch to dynamic root device
authorJohan Hovold <johan@kernel.org>
Fri, 24 Apr 2026 10:40:50 +0000 (12:40 +0200)
committerUlf Hansson <ulfh@kernel.org>
Wed, 3 Jun 2026 09:08:24 +0000 (11:08 +0200)
Driver core expects devices to be dynamically allocated and will, for
example, complain loudly if a device that lacks a release function is
ever freed.

Use root_device_register() to allocate and register the root device
instead of open coding using a static device.

Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Ulf Hansson <ulfh@kernel.org>
drivers/pmdomain/core.c

index f7731270015d97bb29a24ebb66cd0c425cecc6d5..7c96e88302d3959a44105185562ee9560ce4c6e3 100644 (file)
@@ -33,9 +33,7 @@ static const struct bus_type genpd_provider_bus_type = {
 };
 
 /* The parent for genpd_provider devices. */
-static struct device genpd_provider_bus = {
-       .init_name = "genpd_provider",
-};
+static struct device *genpd_provider_bus;
 
 #define GENPD_RETRY_MAX_MS     250             /* Approximate */
 
@@ -2325,7 +2323,7 @@ static int genpd_alloc_data(struct generic_pm_domain *genpd)
        device_initialize(&genpd->dev);
        genpd->dev.release = genpd_provider_release;
        genpd->dev.bus = &genpd_provider_bus_type;
-       genpd->dev.parent = &genpd_provider_bus;
+       genpd->dev.parent = genpd_provider_bus;
 
        if (!genpd_is_dev_name_fw(genpd)) {
                dev_set_name(&genpd->dev, "%s", genpd->name);
@@ -3742,11 +3740,9 @@ static int __init genpd_bus_init(void)
 {
        int ret;
 
-       ret = device_register(&genpd_provider_bus);
-       if (ret) {
-               put_device(&genpd_provider_bus);
-               return ret;
-       }
+       genpd_provider_bus = root_device_register("genpd_provider");
+       if (IS_ERR(genpd_provider_bus))
+               return PTR_ERR(genpd_provider_bus);
 
        ret = bus_register(&genpd_provider_bus_type);
        if (ret)
@@ -3768,7 +3764,7 @@ err_bus:
 err_prov_bus:
        bus_unregister(&genpd_provider_bus_type);
 err_dev:
-       device_unregister(&genpd_provider_bus);
+       root_device_unregister(genpd_provider_bus);
        return ret;
 }
 core_initcall(genpd_bus_init);