Commit 8d5cfb1f authored by John Ogness's avatar John Ogness Committed by Greg Kroah-Hartman
Browse files

serial: 8250: Use frame time to determine timeout



Rather than using a hard-coded per-character Tx-timeout of 10ms,
use the frame time to determine a timeout value. The value is
doubled to ensure that a timeout is only hit during unexpected
circumstances.

Since the frame time may not be available during early printing,
the previous 10ms value is kept as a fallback.

Signed-off-by: default avatarJohn Ogness <john.ogness@linutronix.de>
Reviewed-by: default avatarPetr Mladek <pmladek@suse.com>
Link: https://lore.kernel.org/r/20250107212702.169493-3-john.ogness@linutronix.de


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent d91f98be
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -2081,9 +2081,17 @@ static void serial8250_break_ctl(struct uart_port *port, int break_state)
/* Returns true if @bits were set, false on timeout */
static bool wait_for_lsr(struct uart_8250_port *up, int bits)
{
	unsigned int status, tmout = 10000;
	unsigned int status, tmout;

	/*
	 * Wait for a character to be sent. Fallback to a safe default
	 * timeout value if @frame_time is not available.
	 */
	if (up->port.frame_time)
		tmout = up->port.frame_time * 2 / NSEC_PER_USEC;
	else
		tmout = 10000;

	/* Wait up to 10ms for the character(s) to be sent. */
	for (;;) {
		status = serial_lsr_in(up);