Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1616065 > unrolled thread

[PATCH] watchdog: core: Make use of devm_register_reboot_notifier()

Started byAndrey Smirnov <andrew.smirnov@gmail.com>
First post2017-04-04 16:20 +0200
Last post2017-04-04 18:40 +0200
Articles 5 — 3 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH] watchdog: core: Make use of devm_register_reboot_notifier() Andrey Smirnov <andrew.smirnov@gmail.com> - 2017-04-04 16:20 +0200
    Re: [PATCH] watchdog: core: Make use of devm_register_reboot_notifier() Andy Shevchenko <andy.shevchenko@gmail.com> - 2017-04-04 17:50 +0200
      Re: [PATCH] watchdog: core: Make use of  devm_register_reboot_notifier() Guenter Roeck <linux@roeck-us.net> - 2017-04-04 19:00 +0200
        Re: [PATCH] watchdog: core: Make use of devm_register_reboot_notifier() Andy Shevchenko <andy.shevchenko@gmail.com> - 2017-04-04 19:00 +0200
    Re: [PATCH] watchdog: core: Make use of  devm_register_reboot_notifier() Guenter Roeck <linux@roeck-us.net> - 2017-04-04 18:40 +0200

#1616065 — [PATCH] watchdog: core: Make use of devm_register_reboot_notifier()

FromAndrey Smirnov <andrew.smirnov@gmail.com>
Date2017-04-04 16:20 +0200
Subject[PATCH] watchdog: core: Make use of devm_register_reboot_notifier()
Message-ID<tsxtn-5Xs-13@gated-at.bofh.it>
Save a bit of cleanup code by leveraging newly added
devm_register_reboot_notifier().

Cc: cphealy@gmail.com
Cc: linux-kernel@vger.kernel.org
Cc: Wim Van Sebroeck <wim@iguana.be>
Cc: Guenter Roeck <linux@roeck-us.net>
Cc: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
---

All:

This patch is a follow up to this thread
https://lkml.org/lkml/2017/3/20/671. I am not sure what's the best way
to manager cross-tree dependency here, so, if there's something to be
done, please let me know.

Thanks,
Andrey Smirnov

 drivers/watchdog/watchdog_core.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/watchdog/watchdog_core.c b/drivers/watchdog/watchdog_core.c
index 74265b2..9d868f1 100644
--- a/drivers/watchdog/watchdog_core.c
+++ b/drivers/watchdog/watchdog_core.c
@@ -247,7 +247,8 @@ static int __watchdog_register_device(struct watchdog_device *wdd)
 	if (test_bit(WDOG_STOP_ON_REBOOT, &wdd->status)) {
 		wdd->reboot_nb.notifier_call = watchdog_reboot_notifier;
 
-		ret = register_reboot_notifier(&wdd->reboot_nb);
+		ret = devm_register_reboot_notifier(wdd->parent,
+						    &wdd->reboot_nb);
 		if (ret) {
 			pr_err("watchdog%d: Cannot register reboot notifier (%d)\n",
 			       wdd->id, ret);
@@ -302,9 +303,6 @@ static void __watchdog_unregister_device(struct watchdog_device *wdd)
 	if (wdd->ops->restart)
 		unregister_restart_handler(&wdd->restart_nb);
 
-	if (test_bit(WDOG_STOP_ON_REBOOT, &wdd->status))
-		unregister_reboot_notifier(&wdd->reboot_nb);
-
 	watchdog_dev_unregister(wdd);
 	ida_simple_remove(&watchdog_ida, wdd->id);
 }
-- 
2.9.3

[toc] | [next] | [standalone]


#1616136

FromAndy Shevchenko <andy.shevchenko@gmail.com>
Date2017-04-04 17:50 +0200
Message-ID<tsySu-6KL-29@gated-at.bofh.it>
In reply to#1616065
On Tue, Apr 4, 2017 at 5:10 PM, Andrey Smirnov <andrew.smirnov@gmail.com> wrote:
> Save a bit of cleanup code by leveraging newly added
> devm_register_reboot_notifier().

> @@ -247,7 +247,8 @@ static int __watchdog_register_device(struct watchdog_device *wdd)
>         if (test_bit(WDOG_STOP_ON_REBOOT, &wdd->status)) {
>                 wdd->reboot_nb.notifier_call = watchdog_reboot_notifier;
>
> -               ret = register_reboot_notifier(&wdd->reboot_nb);

> +               ret = devm_register_reboot_notifier(wdd->parent,
> +                                                   &wdd->reboot_nb);

I'm not sure it's logically correct. Perhaps binding to the actual
watchdog device would be better.
Though, Guenter can correct me.

Could it be one line after all?

>                 if (ret) {
>                         pr_err("watchdog%d: Cannot register reboot notifier (%d)\n",
>                                wdd->id, ret);
> @@ -302,9 +303,6 @@ static void __watchdog_unregister_device(struct watchdog_device *wdd)
>         if (wdd->ops->restart)
>                 unregister_restart_handler(&wdd->restart_nb);
>
> -       if (test_bit(WDOG_STOP_ON_REBOOT, &wdd->status))
> -               unregister_reboot_notifier(&wdd->reboot_nb);
> -

-- 
With Best Regards,
Andy Shevchenko

[toc] | [prev] | [next] | [standalone]


#1616205 — Re: [PATCH] watchdog: core: Make use of devm_register_reboot_notifier()

FromGuenter Roeck <linux@roeck-us.net>
Date2017-04-04 19:00 +0200
SubjectRe: [PATCH] watchdog: core: Make use of devm_register_reboot_notifier()
Message-ID<tszYd-7uN-1@gated-at.bofh.it>
In reply to#1616136
On 04/04/2017 08:47 AM, Andy Shevchenko wrote:
> On Tue, Apr 4, 2017 at 5:10 PM, Andrey Smirnov <andrew.smirnov@gmail.com> wrote:
>> Save a bit of cleanup code by leveraging newly added
>> devm_register_reboot_notifier().
>
>> @@ -247,7 +247,8 @@ static int __watchdog_register_device(struct watchdog_device *wdd)
>>         if (test_bit(WDOG_STOP_ON_REBOOT, &wdd->status)) {
>>                 wdd->reboot_nb.notifier_call = watchdog_reboot_notifier;
>>
>> -               ret = register_reboot_notifier(&wdd->reboot_nb);
>
>> +               ret = devm_register_reboot_notifier(wdd->parent,
>> +                                                   &wdd->reboot_nb);
>
> I'm not sure it's logically correct. Perhaps binding to the actual
> watchdog device would be better.
> Though, Guenter can correct me.
>

As mentioned in my other reply, it doesn't work since wdd->parent can be NULL.
It might be possible to move the code into watchdog_dev_register() and tie it
to the watchdog device, but I have not explored what that would require.

Guenter

> Could it be one line after all?
>
>>                 if (ret) {
>>                         pr_err("watchdog%d: Cannot register reboot notifier (%d)\n",
>>                                wdd->id, ret);
>> @@ -302,9 +303,6 @@ static void __watchdog_unregister_device(struct watchdog_device *wdd)
>>         if (wdd->ops->restart)
>>                 unregister_restart_handler(&wdd->restart_nb);
>>
>> -       if (test_bit(WDOG_STOP_ON_REBOOT, &wdd->status))
>> -               unregister_reboot_notifier(&wdd->reboot_nb);
>> -
>

[toc] | [prev] | [next] | [standalone]


#1616212

FromAndy Shevchenko <andy.shevchenko@gmail.com>
Date2017-04-04 19:00 +0200
Message-ID<tszYe-7uN-29@gated-at.bofh.it>
In reply to#1616205
On Tue, Apr 4, 2017 at 7:51 PM, Guenter Roeck <linux@roeck-us.net> wrote:
> On 04/04/2017 08:47 AM, Andy Shevchenko wrote:
>> On Tue, Apr 4, 2017 at 5:10 PM, Andrey Smirnov <andrew.smirnov@gmail.com>
>> wrote:

>>> +               ret = devm_register_reboot_notifier(wdd->parent,
>>> +                                                   &wdd->reboot_nb);
>>
>>
>> I'm not sure it's logically correct. Perhaps binding to the actual
>> watchdog device would be better.
>> Though, Guenter can correct me.
>>
>
> As mentioned in my other reply, it doesn't work since wdd->parent can be
> NULL.
> It might be possible to move the code into watchdog_dev_register() and tie
> it
> to the watchdog device, but I have not explored what that would require.

I would rather add device pointer to watchdoig struct, though it's your call :-)
So, what you decide I'll agree with.

-- 
With Best Regards,
Andy Shevchenko

[toc] | [prev] | [next] | [standalone]


#1616199 — Re: [PATCH] watchdog: core: Make use of devm_register_reboot_notifier()

FromGuenter Roeck <linux@roeck-us.net>
Date2017-04-04 18:40 +0200
SubjectRe: [PATCH] watchdog: core: Make use of devm_register_reboot_notifier()
Message-ID<tszER-7l1-11@gated-at.bofh.it>
In reply to#1616065
On 04/04/2017 07:10 AM, Andrey Smirnov wrote:
> Save a bit of cleanup code by leveraging newly added
> devm_register_reboot_notifier().
>
> Cc: cphealy@gmail.com
> Cc: linux-kernel@vger.kernel.org
> Cc: Wim Van Sebroeck <wim@iguana.be>
> Cc: Guenter Roeck <linux@roeck-us.net>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
> ---
>
> All:
>
> This patch is a follow up to this thread
> https://lkml.org/lkml/2017/3/20/671. I am not sure what's the best way
> to manager cross-tree dependency here, so, if there's something to be
> done, please let me know.
>
> Thanks,
> Andrey Smirnov
>
>  drivers/watchdog/watchdog_core.c | 6 ++----
>  1 file changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/watchdog/watchdog_core.c b/drivers/watchdog/watchdog_core.c
> index 74265b2..9d868f1 100644
> --- a/drivers/watchdog/watchdog_core.c
> +++ b/drivers/watchdog/watchdog_core.c
> @@ -247,7 +247,8 @@ static int __watchdog_register_device(struct watchdog_device *wdd)
>  	if (test_bit(WDOG_STOP_ON_REBOOT, &wdd->status)) {
>  		wdd->reboot_nb.notifier_call = watchdog_reboot_notifier;
>
> -		ret = register_reboot_notifier(&wdd->reboot_nb);
> +		ret = devm_register_reboot_notifier(wdd->parent,
> +						    &wdd->reboot_nb);

I like the idea, but unfortunately wdd->parent can be NULL. Also, this would result
in the notifier being removed _after_ the watchdog device has been removed, which
would be bad as well.

Guenter

>  		if (ret) {
>  			pr_err("watchdog%d: Cannot register reboot notifier (%d)\n",
>  			       wdd->id, ret);
> @@ -302,9 +303,6 @@ static void __watchdog_unregister_device(struct watchdog_device *wdd)
>  	if (wdd->ops->restart)
>  		unregister_restart_handler(&wdd->restart_nb);
>
> -	if (test_bit(WDOG_STOP_ON_REBOOT, &wdd->status))
> -		unregister_reboot_notifier(&wdd->reboot_nb);
> -
>  	watchdog_dev_unregister(wdd);
>  	ida_simple_remove(&watchdog_ida, wdd->id);
>  }
>

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web