Re: [PATCH v23 01/13] power: reset: reboot-mode: Remove devres based allocations
From: Pavan Kondeti <hidden>
Date: 2026-07-21 18:01:49
Also in:
linux-arm-msm, linux-devicetree, linux-pm, lkml
On Tue, Jul 14, 2026 at 10:46:29PM +0530, Shivendra Pratap wrote:
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
You mentioned driver may not be attached. reboot_mode_register()->reboot_mode_create_device() is using `reboot->dev->driver->name` directly for creating the reboot class device?
quoted hunk ↗ jump to hunk
they will not be referenced after the managed resources have been released during driver detach. To ensure correct lifetime handling, avoid using devres-based allocations in the reboot-mode and explicitly handle allocation and cleanup of resources. Reviewed-by: Sebastian Reichel <redacted> Reviewed-by: Bartosz Golaszewski <redacted> Signed-off-by: Shivendra Pratap <redacted> --- drivers/power/reset/reboot-mode.c | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-)diff --git a/drivers/power/reset/reboot-mode.c b/drivers/power/reset/reboot-mode.c index d20e44db0532..7a74f72a8313 100644 --- a/drivers/power/reset/reboot-mode.c +++ b/drivers/power/reset/reboot-mode.c@@ -3,6 +3,8 @@ * Copyright (c) 2016, Fuzhou Rockchip Electronics Co., Ltd */ +#define pr_fmt(fmt) "reboot-mode: " fmt + #include <linux/device.h> #include <linux/err.h> #include <linux/init.h>@@ -10,6 +12,7 @@ #include <linux/list.h> #include <linux/module.h> #include <linux/of.h> +#include <linux/property.h> #include <linux/reboot.h> #include <linux/reboot-mode.h> #include <linux/slab.h>@@ -168,10 +171,11 @@ static int reboot_mode_create_device(struct reboot_mode_driver *reboot) */ int reboot_mode_register(struct reboot_mode_driver *reboot) { - struct mode_info *info; + struct mode_info *info = NULL; 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);@@ -180,19 +184,18 @@ 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 (device_property_read_u32(reboot->dev, prop->name, &magic)) { + pr_debug("reboot mode %s without magic number\n", prop->name);
Any reason for converting dev_xxx to pr_xxx here and below?
+ continue; + } + + info = kzalloc(sizeof(*info), GFP_KERNEL);
The recent commits to this driver adopted kzalloc_obj(). Thanks, Pavan