Skip to content

Commit

Permalink
serial: 8250: Store to lsr_save_flags after lsr read
Browse files Browse the repository at this point in the history
Not all LSR register flags are preserved across reads. Therefore, LSR
readers must store the non-preserved bits into lsr_save_flags.

This fix was initially mixed into feature commit f6f5861 ("serial:
8250: Handle UART without interrupt on TEMT using em485"). However,
that feature change had a flaw and it was reverted to make room for
simpler approach providing the same feature. The embedded fix got
reverted with the feature change.

Re-add the lsr_save_flags fix and properly mark it's a fix.

Link: https://lore.kernel.org/all/[email protected]/T/#m1737eef986bd20cf19593e344cebd7b0244945fc
Fixes: e490c91 ("tty: Add software emulated RS485 support for 8250")
Cc: stable <[email protected]>
Acked-by: Uwe Kleine-König <[email protected]>
Signed-off-by: Uwe Kleine-König <[email protected]>
Signed-off-by: Ilpo Järvinen <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Greg Kroah-Hartman <[email protected]>
  • Loading branch information
ij-intel authored and gregkh committed Jun 10, 2022
1 parent 499e13a commit be03b06
Showing 1 changed file with 2 additions and 0 deletions.
2 changes: 2 additions & 0 deletions drivers/tty/serial/8250/8250_port.c
Original file line number Diff line number Diff line change
Expand Up @@ -1517,6 +1517,8 @@ static inline void __stop_tx(struct uart_8250_port *p)
unsigned char lsr = serial_in(p, UART_LSR);
u64 stop_delay = 0;

p->lsr_saved_flags |= lsr & LSR_SAVE_FLAGS;

if (!(lsr & UART_LSR_THRE))
return;
/*
Expand Down

0 comments on commit be03b06

Please sign in to comment.