mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-02 16:44:10 +08:00
tty: serial: 21285: fix lockup on open
Commit293f899594
("tty: serial: 21285: stop using the unused[] variable from struct uart_port") introduced a bug which stops the transmit interrupt being disabled when there are no characters to transmit - disabling the transmit interrupt at the interrupt controller is the only way to stop an interrupt storm. If this interrupt is not disabled when there are no transmit characters, we end up with an interrupt storm which prevents the machine making forward progress. Fixes:293f899594
("tty: serial: 21285: stop using the unused[] variable from struct uart_port") Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Cc: stable <stable@vger.kernel.org> Link: https://lore.kernel.org/r/E1kU4GS-0006lE-OO@rmk-PC.armlinux.org.uk Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
3650b228f8
commit
82776f6c75
@ -50,25 +50,25 @@ static const char serial21285_name[] = "Footbridge UART";
|
||||
|
||||
static bool is_enabled(struct uart_port *port, int bit)
|
||||
{
|
||||
unsigned long private_data = (unsigned long)port->private_data;
|
||||
unsigned long *private_data = (unsigned long *)&port->private_data;
|
||||
|
||||
if (test_bit(bit, &private_data))
|
||||
if (test_bit(bit, private_data))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
static void enable(struct uart_port *port, int bit)
|
||||
{
|
||||
unsigned long private_data = (unsigned long)port->private_data;
|
||||
unsigned long *private_data = (unsigned long *)&port->private_data;
|
||||
|
||||
set_bit(bit, &private_data);
|
||||
set_bit(bit, private_data);
|
||||
}
|
||||
|
||||
static void disable(struct uart_port *port, int bit)
|
||||
{
|
||||
unsigned long private_data = (unsigned long)port->private_data;
|
||||
unsigned long *private_data = (unsigned long *)&port->private_data;
|
||||
|
||||
clear_bit(bit, &private_data);
|
||||
clear_bit(bit, private_data);
|
||||
}
|
||||
|
||||
#define is_tx_enabled(port) is_enabled(port, tx_enabled_bit)
|
||||
|
Loading…
Reference in New Issue
Block a user