[PATCH v23 01/13] power: reset: reboot-mode: Remove devres based allocations
Shivendra Pratap
shivendra.pratap at oss.qualcomm.com
Tue Jul 21 23:09:17 PDT 2026
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 <sebastian.reichel at collabora.com>
>> Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski at oss.qualcomm.com>
>> Signed-off-by: Shivendra Pratap <shivendra.pratap at oss.qualcomm.com>
>> ---
>> 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
More information about the linux-arm-kernel
mailing list