Commit fbf97170 authored by Sergey Organov's avatar Sergey Organov Committed by Greg Kroah-Hartman
Browse files

serial: imx: do not break from FIFO reading loop prematurely



There is no reason to prematurely break out of FIFO reading loop, and it
might cause needless reenters into ISR, so keep reading until FIFO is
empty.

Signed-off-by: default avatarSergey Organov <sorganov@gmail.com>
Link: https://lore.kernel.org/r/20230201142700.4346-5-sorganov@gmail.com


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent e1c6a7e5
Loading
Loading
Loading
Loading
+3 −7
Original line number Diff line number Diff line
@@ -890,7 +890,7 @@ static void imx_uart_check_flood(struct imx_port *sport, u32 usr2)
static irqreturn_t __imx_uart_rxint(int irq, void *dev_id)
{
	struct imx_port *sport = dev_id;
	unsigned int rx, flg, ignored = 0;
	unsigned int rx, flg;
	struct tty_port *port = &sport->port.state->port;
	u32 usr2;

@@ -923,11 +923,8 @@ static irqreturn_t __imx_uart_rxint(int irq, void *dev_id)
			if (rx & URXD_OVRRUN)
				sport->port.icount.overrun++;

			if (rx & sport->port.ignore_status_mask) {
				if (++ignored > 100)
					goto out;
			if (rx & sport->port.ignore_status_mask)
				continue;
			}

			rx &= (sport->port.read_status_mask | 0xFF);

@@ -946,13 +943,12 @@ static irqreturn_t __imx_uart_rxint(int irq, void *dev_id)
		}

		if (sport->port.ignore_status_mask & URXD_DUMMY_READ)
			goto out;
			continue;

		if (tty_insert_flip_char(port, rx, flg) == 0)
			sport->port.icount.buf_overrun++;
	}

out:
	tty_flip_buffer_push(port);

	return IRQ_HANDLED;