From: Tony Lindgren <tony@atomide.com>
To: John Ogness <john.ogness@linutronix.de>
Cc: "Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
"Petr Mladek" <pmladek@suse.com>,
"Thomas Gleixner" <tglx@linutronix.de>,
linux-kernel@vger.kernel.org, "Jiri Slaby" <jirislaby@kernel.org>,
"Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>,
"Lukas Wunner" <lukas@wunner.de>,
"Matthias Schiffer" <matthias.schiffer@ew.tq-group.com>,
linux-serial@vger.kernel.org
Subject: Re: [PATCH tty v1 7/8] serial: 8250: lock port for UART_IER access in omap8250_irq()
Date: Fri, 26 May 2023 12:01:28 +0300 [thread overview]
Message-ID: <20230526090128.GE14287@atomide.com> (raw)
In-Reply-To: <20230525093159.223817-8-john.ogness@linutronix.de>
* John Ogness <john.ogness@linutronix.de> [230525 09:34]:
> omap8250_irq() accesses UART_IER. This register is modified twice
> by each console write (serial8250_console_write()) under the port
> lock. omap8250_irq() must also take the port lock to guanentee
> synchronized access to UART_IER.
>
> Since the port lock is already being taken for the stop_rx() callback
> and since it is safe to call cancel_delayed_work() while holding the
> port lock, simply extend the port lock region to include UART_IER
> access.
>
> Fixes: 1fe0e1fa3209 ("serial: 8250_omap: Handle optional overrun-throttle-ms property")
> Signed-off-by: John Ogness <john.ogness@linutronix.de>
Reviewed-by: Tony Lindgren <tony@atomide.com>
> ---
> drivers/tty/serial/8250/8250_omap.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/tty/serial/8250/8250_omap.c b/drivers/tty/serial/8250/8250_omap.c
> index 34939462fd69..3225c95fde1d 100644
> --- a/drivers/tty/serial/8250/8250_omap.c
> +++ b/drivers/tty/serial/8250/8250_omap.c
> @@ -659,17 +659,18 @@ static irqreturn_t omap8250_irq(int irq, void *dev_id)
> if ((lsr & UART_LSR_OE) && up->overrun_backoff_time_ms > 0) {
> unsigned long delay;
>
> + /* Synchronize UART_IER access against the console. */
> + spin_lock(&port->lock);
> up->ier = port->serial_in(port, UART_IER);
> if (up->ier & (UART_IER_RLSI | UART_IER_RDI)) {
> - spin_lock(&port->lock);
> port->ops->stop_rx(port);
> - spin_unlock(&port->lock);
> } else {
> /* Keep restarting the timer until
> * the input overrun subsides.
> */
> cancel_delayed_work(&up->overrun_backoff);
> }
> + spin_unlock(&port->lock);
>
> delay = msecs_to_jiffies(up->overrun_backoff_time_ms);
> schedule_delayed_work(&up->overrun_backoff, delay);
> --
> 2.30.2
>
next prev parent reply other threads:[~2023-05-26 9:01 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-25 9:31 [PATCH tty v1 0/8] synchronize UART_IER access against console write John Ogness
2023-05-25 9:31 ` John Ogness
2023-05-25 9:31 ` John Ogness
2023-05-25 9:31 ` [PATCH tty v1 1/8] serial: 8250: lock port in startup() callbacks John Ogness
2023-05-25 9:31 ` [PATCH tty v1 2/8] serial: core: lock port for stop_rx() in uart_suspend_port() John Ogness
2023-05-25 17:47 ` Vijaya Krishna Nivarthi (Temp) (QUIC)
2023-05-25 20:37 ` Doug Anderson
2023-05-25 9:31 ` [PATCH tty v1 3/8] serial: 8250: lock port for stop_rx() in omap8250_irq() John Ogness
2023-05-26 9:00 ` Tony Lindgren
2023-05-25 9:31 ` [PATCH tty v1 4/8] serial: core: lock port for start_rx() in uart_resume_port() John Ogness
2023-05-25 16:07 ` Doug Anderson
2023-05-25 20:38 ` Doug Anderson
2023-05-26 8:09 ` John Ogness
2023-05-25 9:31 ` [PATCH tty v1 5/8] serial: 8250: lock port for rx_dma() callback John Ogness
2023-05-25 9:31 ` [PATCH tty v1 6/8] serial: 8250: lock port for omap8250_restore_regs() John Ogness
2023-05-25 9:31 ` [PATCH tty v1 7/8] serial: 8250: lock port for UART_IER access in omap8250_irq() John Ogness
2023-05-26 9:01 ` Tony Lindgren [this message]
2023-05-25 9:31 ` [PATCH tty v1 8/8] serial: 8250: synchronize and annotate UART_IER access John Ogness
2023-05-25 9:31 ` John Ogness
2023-05-25 9:31 ` John Ogness
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=20230526090128.GE14287@atomide.com \
--to=tony@atomide.com \
--cc=gregkh@linuxfoundation.org \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=jirislaby@kernel.org \
--cc=john.ogness@linutronix.de \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=lukas@wunner.de \
--cc=matthias.schiffer@ew.tq-group.com \
--cc=pmladek@suse.com \
--cc=tglx@linutronix.de \
/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.