* [PATCH] serial: sifive: lock port in startup()/shutdown() callbacks
@ 2025-04-05 13:24 Ryo Takakura
2025-04-05 13:40 ` Greg KH
0 siblings, 1 reply; 3+ messages in thread
From: Ryo Takakura @ 2025-04-05 13:24 UTC (permalink / raw)
To: alex, aou, bigeasy, conor.dooley, gregkh, jirislaby, john.ogness,
palmer, paul.walmsley, pmladek, samuel.holland, u.kleine-koenig
Cc: linux-kernel, linux-riscv, linux-serial, stable, Ryo Takakura
startup()/shutdown() callbacks access SIFIVE_SERIAL_IE_OFFS.
The register is also accessed from write() callback.
If console were printing and startup()/shutdown() callback
gets called, its access to the register could be overwritten.
Add port->lock to startup()/shutdown() callbacks to make sure
their access to SIFIVE_SERIAL_IE_OFFS is synchronized against
write() callback.
Fixes: 45c054d0815b ("tty: serial: add driver for the SiFive UART")
Signed-off-by: Ryo Takakura <ryotkkr98@gmail.com>
Cc: stable@vger.kernel.org
---
This patch used be part of a series for converting sifive driver to
nbcon[0]. It's now sent seperatly as the rest of the series does not
need be applied to the stable branch.
Sincerely,
Ryo Takakura
[0] https://lore.kernel.org/all/20250405043833.397020-1-ryotkkr98@gmail.com/
---
drivers/tty/serial/sifive.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/drivers/tty/serial/sifive.c b/drivers/tty/serial/sifive.c
index 5904a2d4c..054a8e630 100644
--- a/drivers/tty/serial/sifive.c
+++ b/drivers/tty/serial/sifive.c
@@ -563,8 +563,11 @@ static void sifive_serial_break_ctl(struct uart_port *port, int break_state)
static int sifive_serial_startup(struct uart_port *port)
{
struct sifive_serial_port *ssp = port_to_sifive_serial_port(port);
+ unsigned long flags;
+ uart_port_lock_irqsave(&ssp->port, &flags);
__ssp_enable_rxwm(ssp);
+ uart_port_unlock_irqrestore(&ssp->port, flags);
return 0;
}
@@ -572,9 +575,12 @@ static int sifive_serial_startup(struct uart_port *port)
static void sifive_serial_shutdown(struct uart_port *port)
{
struct sifive_serial_port *ssp = port_to_sifive_serial_port(port);
+ unsigned long flags;
+ uart_port_lock_irqsave(&ssp->port, &flags);
__ssp_disable_rxwm(ssp);
__ssp_disable_txwm(ssp);
+ uart_port_unlock_irqrestore(&ssp->port, flags);
}
/**
--
2.34.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] serial: sifive: lock port in startup()/shutdown() callbacks
2025-04-05 13:24 [PATCH] serial: sifive: lock port in startup()/shutdown() callbacks Ryo Takakura
@ 2025-04-05 13:40 ` Greg KH
2025-04-05 14:28 ` Ryo Takakura
0 siblings, 1 reply; 3+ messages in thread
From: Greg KH @ 2025-04-05 13:40 UTC (permalink / raw)
To: Ryo Takakura
Cc: alex, aou, bigeasy, conor.dooley, jirislaby, john.ogness, palmer,
paul.walmsley, pmladek, samuel.holland, u.kleine-koenig,
linux-kernel, linux-riscv, linux-serial, stable
On Sat, Apr 05, 2025 at 10:24:58PM +0900, Ryo Takakura wrote:
> startup()/shutdown() callbacks access SIFIVE_SERIAL_IE_OFFS.
> The register is also accessed from write() callback.
>
> If console were printing and startup()/shutdown() callback
> gets called, its access to the register could be overwritten.
>
> Add port->lock to startup()/shutdown() callbacks to make sure
> their access to SIFIVE_SERIAL_IE_OFFS is synchronized against
> write() callback.
>
> Fixes: 45c054d0815b ("tty: serial: add driver for the SiFive UART")
> Signed-off-by: Ryo Takakura <ryotkkr98@gmail.com>
> Cc: stable@vger.kernel.org
> ---
>
> This patch used be part of a series for converting sifive driver to
> nbcon[0]. It's now sent seperatly as the rest of the series does not
> need be applied to the stable branch.
That means this is a v2 patch, and you should also send the other patch
as a v2 as well, right?
thanks,
greg k-h
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] serial: sifive: lock port in startup()/shutdown() callbacks
2025-04-05 13:40 ` Greg KH
@ 2025-04-05 14:28 ` Ryo Takakura
0 siblings, 0 replies; 3+ messages in thread
From: Ryo Takakura @ 2025-04-05 14:28 UTC (permalink / raw)
To: gregkh
Cc: alex, aou, bigeasy, conor.dooley, jirislaby, john.ogness,
linux-kernel, linux-riscv, linux-serial, palmer, paul.walmsley,
pmladek, ryotkkr98, samuel.holland, stable, u.kleine-koenig
Hi Greg,
On Sat, 5 Apr 2025 14:40:33 +0100, Greg KH wrote:
>On Sat, Apr 05, 2025 at 10:24:58PM +0900, Ryo Takakura wrote:
>> startup()/shutdown() callbacks access SIFIVE_SERIAL_IE_OFFS.
>> The register is also accessed from write() callback.
>>
>> If console were printing and startup()/shutdown() callback
>> gets called, its access to the register could be overwritten.
>>
>> Add port->lock to startup()/shutdown() callbacks to make sure
>> their access to SIFIVE_SERIAL_IE_OFFS is synchronized against
>> write() callback.
>>
>> Fixes: 45c054d0815b ("tty: serial: add driver for the SiFive UART")
>> Signed-off-by: Ryo Takakura <ryotkkr98@gmail.com>
>> Cc: stable@vger.kernel.org
>> ---
>>
>> This patch used be part of a series for converting sifive driver to
>> nbcon[0]. It's now sent seperatly as the rest of the series does not
>> need be applied to the stable branch.
>
>That means this is a v2 patch, and you should also send the other patch
>as a v2 as well, right?
Oh yes. I wasn't sure about the versioning for this patch. Let me resend
this patch as v2.
Also for the other patch, as now its sent as a single standalone patch,
I'll resend it as v2.
>thanks,
>
>greg k-h
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-04-05 14:28 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-05 13:24 [PATCH] serial: sifive: lock port in startup()/shutdown() callbacks Ryo Takakura
2025-04-05 13:40 ` Greg KH
2025-04-05 14:28 ` Ryo Takakura
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox