]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
serial: qcom-geni: do not kill the machine on fifo underrun
authorJohan Hovold <johan+linaro@kernel.org>
Thu, 4 Jul 2024 10:18:05 +0000 (12:18 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 4 Jul 2024 10:30:30 +0000 (12:30 +0200)
The Qualcomm GENI serial driver did not handle buffer flushing and used
to print discarded characters when the circular buffer was cleared.
Since commit 1788cf6a91d9 ("tty: serial: switch from circ_buf to kfifo")
this instead resulted in a hard lockup due to
qcom_geni_serial_send_chunk_fifo() spinning indefinitely in the
interrupt handler.

The underlying bugs have now been fixed, but make sure to output NUL
characters instead of killing the machine if a similar driver bug is
ever reintroduced.

Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
Link: https://lore.kernel.org/r/20240704101805.30612-4-johan+linaro@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/qcom_geni_serial.c

index b2bbd2d79dbbf7356b57a35acd8529844a1cb6c0..69a632fefc41f9a24831b5b205453a8f73d5bf4d 100644 (file)
@@ -878,7 +878,7 @@ static void qcom_geni_serial_send_chunk_fifo(struct uart_port *uport,
                memset(buf, 0, sizeof(buf));
                tx_bytes = min(remaining, BYTES_PER_FIFO_WORD);
 
-               tx_bytes = uart_fifo_out(uport, buf, tx_bytes);
+               uart_fifo_out(uport, buf, tx_bytes);
 
                iowrite32_rep(uport->membase + SE_GENI_TX_FIFOn, buf, 1);