Thread (30 messages) 30 messages, 4 authors, 2026-03-02

Re: [PATCH v19 01/10] power: reset: reboot-mode: Remove devres based allocations

From: Shivendra Pratap <hidden>
Date: 2026-01-05 17:54:07
Also in: linux-arm-msm, linux-devicetree, linux-pm, lkml


On 1/2/2026 3:35 PM, Bartosz Golaszewski wrote:
On Sun, Dec 28, 2025 at 6:20 PM Shivendra Pratap
[off-list ref] wrote:
quoted
Devres APIs are intended for use in drivers, where the managed lifetime
of resources is tied directly to the driver attach/detach cycle. In
shared subsystem code, there is no guarantee that the subsystem
functions will only be called after a driver has been attached, nor that
they will not be referenced after the managed resources have been
released during driver detach.
[SNIP..]
quoted
@@ -71,9 +74,11 @@ static int reboot_mode_notify(struct notifier_block *this,
 int reboot_mode_register(struct reboot_mode_driver *reboot)
 {
        struct mode_info *info;
+       struct mode_info *next;
        struct property *prop;
        struct device_node *np = reboot->dev->of_node;
        size_t len = strlen(PREFIX);
+       u32 magic;
        int ret;

        INIT_LIST_HEAD(&reboot->head);
@@ -82,19 +87,17 @@ int reboot_mode_register(struct reboot_mode_driver *reboot)
                if (strncmp(prop->name, PREFIX, len))
                        continue;

-               info = devm_kzalloc(reboot->dev, sizeof(*info), GFP_KERNEL);
+               if (of_property_read_u32(np, prop->name, &magic)) {
Please use device_property_read_u32() if you have access to a device struct.
Ack. Can it go in same patch with the fixes tag?
quoted
+                       pr_err("reboot mode %s without magic number\n", prop->name);
If this is an error, shouldn't we bail out?
quoted
+                       continue;
+               }
+
+               info = kzalloc(sizeof(*info), GFP_KERNEL);
                if (!info) {
                        ret = -ENOMEM;
                        goto error;
                }

-               if (of_property_read_u32(np, prop->name, &info->magic)) {
-                       dev_err(reboot->dev, "reboot mode %s without magic number\n",
-                               info->mode);
-                       devm_kfree(reboot->dev, info);
-                       continue;
-               }
-
                info->mode = kstrdup_const(prop->name + len, GFP_KERNEL);
                if (!info->mode) {
                        ret =  -ENOMEM;
@@ -102,8 +105,7 @@ int reboot_mode_register(struct reboot_mode_driver *reboot)
                } else if (info->mode[0] == '\0') {
                        kfree_const(info->mode);
                        ret = -EINVAL;
-                       dev_err(reboot->dev, "invalid mode name(%s): too short!\n",
-                               prop->name);
+                       pr_err("invalid mode name(%s): too short!\n", prop->name);
                        goto error;
                }
@@ -116,8 +118,12 @@ int reboot_mode_register(struct reboot_mode_driver *reboot)
        return 0;

 error:
-       list_for_each_entry(info, &reboot->head, list)
+       kfree(info);
+       list_for_each_entry_safe(info, next, &reboot->head, list) {
+               list_del(&info->list);
                kfree_const(info->mode);
+               kfree(info);
+       }

        return ret;
 }
@@ -130,11 +136,15 @@ EXPORT_SYMBOL_GPL(reboot_mode_register);
 int reboot_mode_unregister(struct reboot_mode_driver *reboot)
 {
        struct mode_info *info;
+       struct mode_info *next;

        unregister_reboot_notifier(&reboot->reboot_notifier);

-       list_for_each_entry(info, &reboot->head, list)
+       list_for_each_entry_safe(info, next, &reboot->head, list) {
+               list_del(&info->list);
                kfree_const(info->mode);
+               kfree(info);
+       }
The code is repeated here, maybe factor it out into a separate function?
Ack. let me try that.

thanks,
Shivendra
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help