From: John Ogness <john.ogness@linutronix.de>
To: "Leonardo Bras" <leobras@redhat.com>,
"Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
Cc: Leonardo Bras <leobras@redhat.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Jiri Slaby <jirislaby@kernel.org>,
Thomas Gleixner <tglx@linutronix.de>,
Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
Florian Fainelli <f.fainelli@gmail.com>,
Tony Lindgren <tony@atomide.com>,
Marcelo Tosatti <mtosatti@redhat.com>,
LKML <linux-kernel@vger.kernel.org>,
linux-serial <linux-serial@vger.kernel.org>
Subject: Re: [RESEND RFC PATCH v1 2/2] serial/8250: Avoid getting lock in RT atomic context
Date: Thu, 18 Jan 2024 10:07:45 +0106 [thread overview]
Message-ID: <87o7djaubq.fsf@jogness.linutronix.de> (raw)
In-Reply-To: <ZabJGefGkrs0SNzW@LeoBras>
On 2024-01-16, Leonardo Bras <leobras@redhat.com> wrote:
> Well, at least in an PREEMPT_RT=y kernel I have found this same bug
> reproducing several times, and through the debugging that I went through I
> saw no mechanism for preventing it.
>
> This is one example of the bug:
> While writing to serial with serial8250_tx_chars in a irq_thread handler
> there is an interruption, and __report_bad_irq() tries to printk
> stuff to the console, and when printk goes down to
> serial8250_console_write() and tried to get the port->lock, which causes
> the "BUG: scheduling while atomic":
>
> [ 42.485878] irq 4: nobody cared (try booting with the "irqpoll" option)
> [ 42.485886] BUG: scheduling while atomic: irq/4-ttyS0/751/0x00010002
> [ 42.485890] Modules linked in:
> [ 42.485892] Preemption disabled at:
> [ 42.485893] [<ffffffff8118ac80>] irq_enter_rcu+0x10/0x80
> [ 42.485919] CPU: 0 PID: 751 Comm: irq/4-ttyS0 Not tainted 6.7.0-rc6+ #6
This is 6.7.0-rc6+. How are you setting PREEMPT_RT?
> [ 42.485927] Hardware name: Red Hat KVM/RHEL, BIOS 1.16.3-1.el9 04/01/2014
> [ 42.485929] Call Trace:
> [ 42.485940] <IRQ>
> [ 42.485944] dump_stack_lvl+0x33/0x50
> [ 42.485976] __schedule_bug+0x89/0xa0
> [ 42.485991] schedule_debug.constprop.0+0xd1/0x120
> [ 42.485996] __schedule+0x50/0x690
> [ 42.486026] schedule_rtlock+0x1e/0x40
> [ 42.486029] rtlock_slowlock_locked+0xe7/0x2b0
> [ 42.486047] rt_spin_lock+0x41/0x60
> [ 42.486051] serial8250_console_write+0x1be/0x460
On PREEMPT_RT-patched kernel, serial8250_console_write() is not
compiled. So obviously you are not running a PREEMPT_RT-patched kernel.
> [ 42.486094] console_flush_all+0x18d/0x3c0
> [ 42.486111] console_unlock+0x6c/0xd0
Flushing on console_unlock() is the legacy method.
I assume you are using a mainline kernel with forced threading of
irqs. Mainline has many known problems with console printing, including
calling printk when the port->lock is held.
This has been discussed before [0].
> [ 42.486117] vprintk_emit+0x1d6/0x290
> [ 42.486122] _printk+0x58/0x80
> [ 42.486139] __report_bad_irq+0x26/0xc0
> [ 42.486147] note_interrupt+0x2a1/0x2f0
> [ 42.486155] handle_irq_event+0x84/0x90
> [ 42.486161] handle_edge_irq+0x9f/0x260
> [ 42.486168] __common_interrupt+0x68/0x100
> [ 42.486178] common_interrupt+0x9f/0xc0
> [ 42.486184] </IRQ>
If you want to fix any threaded irq problems relating to printk and
console drivers, please use the latest PREEMPT_RT patch series with
CONFIG_PREEMPT_RT enabled. This is the current work that is being
reviewed on LKML for mainline inclusion. Thanks!
John Ogness
[0] https://lore.kernel.org/lkml/87il5o32w9.fsf@jogness.linutronix.de
next prev parent reply other threads:[~2024-01-18 9:01 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-16 7:36 [RESEND RFC PATCH v1 0/2] Fix serial console for PREEMPT_RT Leonardo Bras
2024-01-16 7:36 ` [RESEND RFC PATCH v1 1/2] irq/spurious: Reset irqs_unhandled if an irq_thread handles one IRQ request Leonardo Bras
2024-01-17 22:08 ` Thomas Gleixner
2024-01-17 22:46 ` Leonardo Bras
2024-01-18 9:24 ` Leonardo Bras
2024-01-16 7:37 ` [RESEND RFC PATCH v1 2/2] serial/8250: Avoid getting lock in RT atomic context Leonardo Bras
2024-01-16 8:48 ` Ilpo Järvinen
2024-01-16 18:21 ` Leonardo Bras
2024-01-18 9:01 ` John Ogness [this message]
2024-01-18 9:36 ` Leonardo Bras
2024-01-18 10:27 ` John Ogness
2024-01-18 17:50 ` Leonardo Bras
2024-01-18 10:33 ` Jiri Slaby
2024-01-18 17:57 ` Leonardo Bras
2024-01-17 22:44 ` Thomas Gleixner
2024-01-17 23:18 ` Leonardo Bras
2024-01-19 2:40 ` kernel test robot
2024-01-19 6:15 ` kernel test robot
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=87o7djaubq.fsf@jogness.linutronix.de \
--to=john.ogness@linutronix.de \
--cc=andriy.shevchenko@linux.intel.com \
--cc=f.fainelli@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=jirislaby@kernel.org \
--cc=leobras@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=mtosatti@redhat.com \
--cc=tglx@linutronix.de \
--cc=tony@atomide.com \
/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.