Re: [PATCH] kernel/reboot: add devm_register_reboot_notifier

From: Andrew Morton
Date: Wed Mar 29 2017 - 19:17:44 EST


On Mon, 20 Mar 2017 10:17:53 -0700 Andrey Smirnov <andrew.smirnov@xxxxxxxxx> wrote:

> Add devm_* wrapper around register_reboot_notifier to simplify device
> specific reboot notifier registration/unregistration.
>
> --- a/kernel/reboot.c
> +++ b/kernel/reboot.c
> @@ -104,6 +104,33 @@ int unregister_reboot_notifier(struct notifier_block *nb)
> }
> EXPORT_SYMBOL(unregister_reboot_notifier);
>
> +static void devm_unregister_reboot_notifier(struct device *dev, void *res)
> +{
> + WARN_ON(unregister_reboot_notifier(*(struct notifier_block **)res));
> +}
> +
> +int devm_register_reboot_notifier(struct device *dev, struct notifier_block *nb)
> +{
> + struct notifier_block **rcnb;
> + int ret;
> +
> + rcnb = devres_alloc(devm_unregister_reboot_notifier,
> + sizeof(*rcnb), GFP_KERNEL);
> + if (!rcnb)
> + return -ENOMEM;
> +
> + ret = register_reboot_notifier(nb);
> + if (!ret) {
> + *rcnb = nb;
> + devres_add(dev, rcnb);
> + } else {
> + devres_free(rcnb);
> + }
> +
> + return ret;
> +}
> +EXPORT_SYMBOL(devm_register_reboot_notifier);

Seems reasonable. Can we please have some patches which actually use
this?