diff mbox series

[v3] tty: serial: msm_serial: avoid system lockup condition

Message ID 20190610172308.21129-1-jorge.ramirez-ortiz@linaro.org
State New
Headers show
Series [v3] tty: serial: msm_serial: avoid system lockup condition | expand

Commit Message

Jorge Ramirez-Ortiz June 10, 2019, 5:23 p.m. UTC
The function msm_wait_for_xmitr can be taken with interrupts
disabled. In order to avoid a potential system lockup - demonstrated
under stress testing conditions on SoC QCS404/5 - make sure we wait
for a bounded amount of time.

Tested on SoC QCS404.

Signed-off-by: Jorge Ramirez-Ortiz <jorge.ramirez-ortiz@linaro.org>

---
 v2: fix exit condition (timeout --> !timeout)
 v3: add these clarification messages
 
 drivers/tty/serial/msm_serial.c | 4 ++++
 1 file changed, 4 insertions(+)

-- 
2.21.0
diff mbox series

Patch

diff --git a/drivers/tty/serial/msm_serial.c b/drivers/tty/serial/msm_serial.c
index 23833ad952ba..3657a24913fc 100644
--- a/drivers/tty/serial/msm_serial.c
+++ b/drivers/tty/serial/msm_serial.c
@@ -383,10 +383,14 @@  static void msm_request_rx_dma(struct msm_port *msm_port, resource_size_t base)
 
 static inline void msm_wait_for_xmitr(struct uart_port *port)
 {
+	unsigned int timeout = 500000;
+
 	while (!(msm_read(port, UART_SR) & UART_SR_TX_EMPTY)) {
 		if (msm_read(port, UART_ISR) & UART_ISR_TX_READY)
 			break;
 		udelay(1);
+		if (!timeout--)
+			break;
 	}
 	msm_write(port, UART_CR_CMD_RESET_TX_READY, UART_CR);
 }