Re: [PATCH 3/3] watchdog: qcom: Register pretimeout interrupt as NMI

Mayank Rungta <[email protected]> Fri, 31 Jul 2026 16:54:56 -0700
Newsgroups org.kernel.vger.linux-watchdog,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-kernel
Message-ID <CABz7rdDtevcOrS=3cmE8Ac7PYWaPmu=Y+NoJp07pc3ZQr3Pc+g@mail.gmail.com>
On Fri, Jul 31, 2026 at 7:12=E2=80=AFAM Guenter Roeck <[email protected]> =
wrote:
>
> On 7/31/26 04:56, Konrad Dybcio wrote:
> > On 7/30/26 11:32 PM, Mayank Rungta via B4 Relay wrote:
> >> From: Mayank Rungta <[email protected]>
> >>
> >> When a system is completely unresponsive due to an interrupt storm or
> >> deadlocked CPU cores with standard interrupts disabled, a standard wat=
chdog
> >> pretimeout bark interrupt will fail to execute, preventing the pretime=
out
> >> governor from capturing CPU backtraces before the hardware reset bite.
> >
> > [...]
> >
> >>   drivers/watchdog/qcom-wdt.c | 55 +++++++++++++++++++++++++++++++++++=
++++++----
> >>   1 file changed, 51 insertions(+), 4 deletions(-)
> >>
> >> diff --git a/drivers/watchdog/qcom-wdt.c b/drivers/watchdog/qcom-wdt.c
> >> index 49bd04841f0c..19d8e91cff40 100644
> >> --- a/drivers/watchdog/qcom-wdt.c
> >> +++ b/drivers/watchdog/qcom-wdt.c
> >> @@ -51,6 +51,9 @@ struct qcom_wdt {
> >>      unsigned long           rate;
> >>      void __iomem            *base;
> >>      const u32               *layout;
> >> +    int                     irq;
> >> +    bool                    is_nmi;
> >> +    bool                    irq_enabled;
> >
> > Do we need to track this? I think we can rely on the framework
> > NOPing out multiple ops->start requests
> >
> Good point. Agreed.
>
> Guenter
>

Thanks for the review!

It seems you are correct. I initially added irq_enabled to guard
against duplicate starts during bootloader handoff when
qcom_wdt_is_running is true (since qcom_wdt_start() is then called
directly outside watchdog_dev). However, after inspecting
watchdog_dev.c, watchdog_start() routes bootloader handoff
(WDOG_HW_RUNNING) to .ping instead of calling ops->start() again.

I will remove `bool irq_enabled` from struct qcom_wdt in v2 since the
framework ensures enable_nmi() and disable_nmi_nosync() are always 1:1
balanced.

Thanks,
Mayank