Re: [PATCH v23 01/13] power: reset: reboot-mode: Remove devres based allocations
Shivendra Pratap <[email protected]> Wed, 22 Jul 2026 11:39:17 +0530
| Newsgroups | dev.linux.lists.mfd,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel,org.kernel.vger.linux-pm |
|---|---|
| Message-ID | <[email protected]> |
On 21-07-2026 23:30, Pavan Kondeti wrote: > 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? Will review and re-word it? In current design, reboot-mode needs a device based registration and dev->driver->name is used as sysfs name. > >> 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 <[email protected]> >> Reviewed-by: Bartosz Golaszewski <[email protected]> >> Signed-off-by: Shivendra Pratap <[email protected]> >> --- >> 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? this seems a slip from old design, where driver dependency was removed and reboot-mode added fwnode based registration. Will update this. > >> + continue; >> + } >> + >> + info = kzalloc(sizeof(*info), GFP_KERNEL); > > The recent commits to this driver adopted kzalloc_obj(). will change it to kzalloc_obj(). thanks, Shivendra