Re: [PATCH 1/3] watchdog: realtek-otto: Change to use regmap API
Rustam Adilov <[email protected]> Fri, 15 May 2026 20:48:59 +0000
| Newsgroups | dev.linux.lists.sashiko,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-watchdog |
|---|---|
| Message-ID | <[email protected]> |
On 2026-05-09 17:16, [email protected] wrote: > Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider: > - [High] Deadlock risk in the atomic restart handler due to regmap's internal spinlock. > -- > > commit a520c8e2203154ba331a6ae28f00daec074e62ee > Author: Rustam Adilov <[email protected]> > > watchdog: realtek-otto: Change to use regmap API > > This commit converts the realtek-otto watchdog driver to use the regmap API > instead of direct mmio accesses. It replaces direct read/modify/write > sequences with regmap functions and selects REGMAP_MMIO. > >> diff --git a/drivers/watchdog/realtek_otto_wdt.c b/drivers/watchdog/realtek_otto_wdt.c >> index 2c30ddd574c59..e5e9cb480f4f9 100644 >> --- a/drivers/watchdog/realtek_otto_wdt.c >> +++ b/drivers/watchdog/realtek_otto_wdt.c > [ ... ] >> @@ -199,7 +189,7 @@ static int otto_wdt_restart(struct watchdog_device *wdev, unsigned long reboot_m >> >> /* Configure for shortest timeout and wait for reset to occur */ >> v = FIELD_PREP(OTTO_WDT_CTRL_RST_MODE, reset_mode) | OTTO_WDT_CTRL_ENABLE; >> - iowrite32(v, ctrl->base + OTTO_WDT_REG_CTRL); >> + regmap_write(ctrl->regmap, OTTO_WDT_REG_CTRL, v); > > Could this regmap_write() cause a deadlock during system restart? > > The restart handler is often called during system shutdown or kernel panic > in an atomic context with local interrupts disabled. Since > devm_regmap_init_mmio() configures the regmap to use a spinlock by default, > if a panic occurs while another cpu holds the regmap lock (e.g., during > a ping or timeout update) and that cpu is halted by smp_send_stop(), this > regmap_write() could spin endlessly and prevent the system from rebooting. > > Additionally, on preempt-rt kernels, the regmap spinlock becomes a sleepable > rt_mutex, which could cause a sleeping in atomic context bug when acquired > with interrupts disabled. > >> mdelay(3 * otto_wdt_tick_ms(ctrl, 0)); >> Hi Sander, I hope it is alright if i CCd you for this as i am not an expert on watchdog stuff. Wonna make sure this issue applies here before i proceed with the suggested solution to add .disable_locking to regmap_config without understanding the consequences of it. Best, Rustam