2020-08-24 08:28:46

by Zhao Qiang

[permalink] [raw]
Subject: [PATCH] watchdog: sbsa_gwdt: add shutdown hook to driver

From: Zhao Qiang <[email protected]>

Kexec maybe need more time than timeout of wdt(sbsa)
which will reset the system.
So it is necessary to add shutdown hook to disable the
wdt when run kexec.

Signed-off-by: Zhao Qiang <[email protected]>
---
drivers/watchdog/sbsa_gwdt.c | 9 +++++++++
1 file changed, 9 insertions(+)

diff --git a/drivers/watchdog/sbsa_gwdt.c b/drivers/watchdog/sbsa_gwdt.c
index f0f1e3b..bbcd04d 100644
--- a/drivers/watchdog/sbsa_gwdt.c
+++ b/drivers/watchdog/sbsa_gwdt.c
@@ -313,6 +313,14 @@ static int sbsa_gwdt_probe(struct platform_device *pdev)
return 0;
}

+static void sbsa_gwdt_shutdown(struct platform_device *pdev)
+{
+ struct sbsa_gwdt *gwdt;
+
+ gwdt = platform_get_drvdata(pdev);
+ sbsa_gwdt_stop(&gwdt->wdd);
+}
+
/* Disable watchdog if it is active during suspend */
static int __maybe_unused sbsa_gwdt_suspend(struct device *dev)
{
@@ -357,6 +365,7 @@ static struct platform_driver sbsa_gwdt_driver = {
.pm = &sbsa_gwdt_pm_ops,
.of_match_table = sbsa_gwdt_of_match,
},
+ .shutdown = sbsa_gwdt_shutdown,
.probe = sbsa_gwdt_probe,
.id_table = sbsa_gwdt_pdev_match,
};
--
2.7.4


2020-08-24 13:30:31

by Guenter Roeck

[permalink] [raw]
Subject: Re: [PATCH] watchdog: sbsa_gwdt: add shutdown hook to driver

On 8/24/20 1:18 AM, Qiang Zhao wrote:
> From: Zhao Qiang <[email protected]>
>
> Kexec maybe need more time than timeout of wdt(sbsa)
> which will reset the system.
> So it is necessary to add shutdown hook to disable the
> wdt when run kexec.
>

Please explain why watchdog_stop_on_reboot() does not work.

Thanks,
Guenter

> Signed-off-by: Zhao Qiang <[email protected]>
> ---
> drivers/watchdog/sbsa_gwdt.c | 9 +++++++++
> 1 file changed, 9 insertions(+)
>
> diff --git a/drivers/watchdog/sbsa_gwdt.c b/drivers/watchdog/sbsa_gwdt.c
> index f0f1e3b..bbcd04d 100644
> --- a/drivers/watchdog/sbsa_gwdt.c
> +++ b/drivers/watchdog/sbsa_gwdt.c
> @@ -313,6 +313,14 @@ static int sbsa_gwdt_probe(struct platform_device *pdev)
> return 0;
> }
>
> +static void sbsa_gwdt_shutdown(struct platform_device *pdev)
> +{
> + struct sbsa_gwdt *gwdt;
> +
> + gwdt = platform_get_drvdata(pdev);
> + sbsa_gwdt_stop(&gwdt->wdd);
> +}
> +
> /* Disable watchdog if it is active during suspend */
> static int __maybe_unused sbsa_gwdt_suspend(struct device *dev)
> {
> @@ -357,6 +365,7 @@ static struct platform_driver sbsa_gwdt_driver = {
> .pm = &sbsa_gwdt_pm_ops,
> .of_match_table = sbsa_gwdt_of_match,
> },
> + .shutdown = sbsa_gwdt_shutdown,
> .probe = sbsa_gwdt_probe,
> .id_table = sbsa_gwdt_pdev_match,
> };
>

2020-08-27 07:57:40

by Zhao Qiang

[permalink] [raw]
Subject: RE: [PATCH] watchdog: sbsa_gwdt: add shutdown hook to driver

On 8/24/20 21:29 AM, Guenter Roeck <[email protected]> wrote:

> -----Original Message-----
> From: Guenter Roeck <[email protected]> On Behalf Of Guenter Roeck
> Sent: 2020年8月24日 21:29
> To: Qiang Zhao <[email protected]>; [email protected]
> Cc: [email protected]; [email protected]
> Subject: Re: [PATCH] watchdog: sbsa_gwdt: add shutdown hook to driver
>
> On 8/24/20 1:18 AM, Qiang Zhao wrote:
> > From: Zhao Qiang <[email protected]>
> >
> > Kexec maybe need more time than timeout of wdt(sbsa) which will reset
> > the system.
> > So it is necessary to add shutdown hook to disable the wdt when run
> > kexec.
> >
>
> Please explain why watchdog_stop_on_reboot() does not work.
>

Thank you for your comments, it is helpful.
I investigate this issue again, found that this watchdog are enabled by uboot,
Meanwhile in kernel, it is not the default watchdog, in another words, it is not active in kernel.
So watchdog_stop_on_reboot() does not work.
This patch is not the right solution for the situation, I will abandon it.

Best Regards
Qiang Zhao

2020-08-27 16:53:55

by Guenter Roeck

[permalink] [raw]
Subject: Re: [PATCH] watchdog: sbsa_gwdt: add shutdown hook to driver

On Thu, Aug 27, 2020 at 07:55:31AM +0000, Qiang Zhao wrote:
> On 8/24/20 21:29 AM, Guenter Roeck <[email protected]> wrote:
>
> > -----Original Message-----
> > From: Guenter Roeck <[email protected]> On Behalf Of Guenter Roeck
> > Sent: 2020年8月24日 21:29
> > To: Qiang Zhao <[email protected]>; [email protected]
> > Cc: [email protected]; [email protected]
> > Subject: Re: [PATCH] watchdog: sbsa_gwdt: add shutdown hook to driver
> >
> > On 8/24/20 1:18 AM, Qiang Zhao wrote:
> > > From: Zhao Qiang <[email protected]>
> > >
> > > Kexec maybe need more time than timeout of wdt(sbsa) which will reset
> > > the system.
> > > So it is necessary to add shutdown hook to disable the wdt when run
> > > kexec.
> > >
> >
> > Please explain why watchdog_stop_on_reboot() does not work.
> >
>
> Thank you for your comments, it is helpful.
> I investigate this issue again, found that this watchdog are enabled by uboot,
> Meanwhile in kernel, it is not the default watchdog, in another words, it is not active in kernel.
> So watchdog_stop_on_reboot() does not work.
> This patch is not the right solution for the situation, I will abandon it.

Yes, it is the wrong solution. watchdog_reboot_notifier() needs to be
fixed instead: It needs to check check if the hardware watchdog is running
(not if it is active). Also, the reboot notifier should only be registered
if the stop callback exists (and otherwise bail out with an error).

Thanks,
Guenter