From: Petr Mladek <pmladek@suse.com>
To: Breno Leitao <leitao@debian.org>
Cc: Russell King <linux@armlinux.org.uk>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Jiri Slaby <jirislaby@kernel.org>,
linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org,
John Ogness <john.ogness@linutronix.de>,
Toshiyuki Sato <fj6611ie@aa.jp.fujitsu.com>,
kernel-team@meta.com
Subject: Re: [PATCH] serial: amba-pl011: touch the watchdogs in write_atomic()
Date: Thu, 5 Nov 2026 11:37:39 +0100 [thread overview]
Message-ID: <auxcc43USXjFxBeI@pathway.suse.cz> (raw)
In-Reply-To: <20261104-pl011_touch-v1-1-e292bd834e14@debian.org>
On Wed 2026-11-04 02:35:51, Breno Leitao wrote:
> In emergency context, such as WARN(), nbcon prints the pending records
> through write_atomic() with preemption disabled.
>
> On arm64, WARN() can run with IRQs masked, so the whole backlog is
> printed with IRQs off as well.
>
> Commit 9bd18e1262c0 ("printk/nbcon: Restore IRQ in atomic flush after
> each emitted record") does not help here, as it only restores the
> caller's IRQ state between records.
>
> pl011_console_write_atomic() busy-waits on the UART for every
> character, and at 115200 baud it prints about 11.5KB per second.
> Flushing a few hundred kilobytes outlasts the hard lockup threshold
> (10 seconds by default), so the printing CPU is reported, or the
> machine panics with hardlockup_panic set. See [1].
>
> The 8250 driver avoids this by calling touch_nmi_watchdog() while it
> polls the transmitter. Do the same in pl011_console_write_atomic(),
> once per record.
>
> Suggested-by: John Ogness <john.ogness@linutronix.de>
> Link: https://lore.kernel.org/all/87wlqtxb14.fsf@jogness.linutronix.de/ [1]
> Signed-off-by: Breno Leitao <leitao@debian.org>
Makes sense:
Reviewed-by: Petr Mladek <pmladek@suse.com>
See a comment below.
> --- a/drivers/tty/serial/amba-pl011.c
> +++ b/drivers/tty/serial/amba-pl011.c
> @@ -41,6 +41,7 @@
> #include <linux/sizes.h>
> #include <linux/io.h>
> #include <linux/acpi.h>
> +#include <linux/nmi.h>
>
> #define UART_NR 14
>
> @@ -2734,6 +2735,9 @@ pl011_console_write_atomic(struct console *co, struct nbcon_write_context *wctxt
> struct uart_amba_port *uap = amba_ports[co->index];
> unsigned int old_cr = 0;
>
> + /* An atomic flush may print a long backlog with IRQs disabled. */
> + touch_nmi_watchdog();
> +
I would personally touch the watchdog at the end before returning from
the function because it still could spend some non-trivial time
in this function.
But I do not have strong opinion about it. AFAIK, there is no official
recommendation. Some callers do it before and some after the delay.
And it should not make a real-life difference because a single
pl011_console_write_atomic() should not trigger the watchdog report.
The problem is when it is called many times in an atomic context.
So that it probably does not matter after all. It is a matter
of taste...
Feel free to keep it as is.
> if (!nbcon_enter_unsafe(wctxt))
> return;
Best Regards,
Petr
next prev parent reply other threads:[~2026-11-05 10:37 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-04 10:35 [PATCH] serial: amba-pl011: touch the watchdogs in write_atomic() Breno Leitao
2026-11-04 11:02 ` sashiko-bot
2026-11-04 11:22 ` John Ogness
2026-11-05 10:37 ` Petr Mladek [this message]
2026-11-05 10:42 ` Breno Leitao
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=auxcc43USXjFxBeI@pathway.suse.cz \
--to=pmladek@suse.com \
--cc=fj6611ie@aa.jp.fujitsu.com \
--cc=gregkh@linuxfoundation.org \
--cc=jirislaby@kernel.org \
--cc=john.ogness@linutronix.de \
--cc=kernel-team@meta.com \
--cc=leitao@debian.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=linux@armlinux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.