mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-03-22 07:27:12 +08:00
serial: 8250: Protect LCR write in shutdown
The 8250_dw driver needs to potentially perform very complex operations during LCR writes because its BUSY handling prevents updates to LCR while UART is BUSY (which is not fully under our control without those complex operations). Thus, LCR writes should occur under port's lock. Move LCR write under port's lock in serial8250_do_shutdown(). Also split the LCR RMW so that the logic is on a separate line for clarity. Reported-by: Bandal, Shankar <shankar.bandal@intel.com> Tested-by: Bandal, Shankar <shankar.bandal@intel.com> Tested-by: Murthy, Shanth <shanth.murthy@intel.com> Cc: stable <stable@kernel.org> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> Link: https://patch.msgid.link/20260203171049.4353-2-ilpo.jarvinen@linux.intel.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
9c0072bc33
commit
59a33d83bb
@@ -2348,6 +2348,7 @@ static int serial8250_startup(struct uart_port *port)
|
||||
void serial8250_do_shutdown(struct uart_port *port)
|
||||
{
|
||||
struct uart_8250_port *up = up_to_u8250p(port);
|
||||
u32 lcr;
|
||||
|
||||
serial8250_rpm_get(up);
|
||||
/*
|
||||
@@ -2374,13 +2375,13 @@ void serial8250_do_shutdown(struct uart_port *port)
|
||||
port->mctrl &= ~TIOCM_OUT2;
|
||||
|
||||
serial8250_set_mctrl(port, port->mctrl);
|
||||
|
||||
/* Disable break condition */
|
||||
lcr = serial_port_in(port, UART_LCR);
|
||||
lcr &= ~UART_LCR_SBC;
|
||||
serial_port_out(port, UART_LCR, lcr);
|
||||
}
|
||||
|
||||
/*
|
||||
* Disable break condition and FIFOs
|
||||
*/
|
||||
serial_port_out(port, UART_LCR,
|
||||
serial_port_in(port, UART_LCR) & ~UART_LCR_SBC);
|
||||
serial8250_clear_fifos(up);
|
||||
|
||||
rsa_disable(up);
|
||||
|
||||
Reference in New Issue
Block a user