From f46551cd83d64aa6bd1823e73ee84901f1ffb3bf Mon Sep 17 00:00:00 2001 From: Chandana Kishori Chiluveru Date: Tue, 6 Apr 2021 12:59:43 +0530 Subject: [PATCH] serial: msm_geni_serial: Bailout from suspend if RX data is pending This change is to resolve potential race btw stop rx and cancel rx due to interrupt latency in the system. Change-Id: I7b510949f75bac5ec9f8f42f3d139131b259600f Signed-off-by: Chandana Kishori Chiluveru --- drivers/tty/serial/msm_geni_serial.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/tty/serial/msm_geni_serial.c b/drivers/tty/serial/msm_geni_serial.c index bb9397279d4b..b475acc88bda 100644 --- a/drivers/tty/serial/msm_geni_serial.c +++ b/drivers/tty/serial/msm_geni_serial.c @@ -1417,6 +1417,7 @@ static int stop_rx_sequencer(struct uart_port *uport) bool is_rx_active; unsigned int stale_delay; u32 dma_rx_status, s_irq_status; + int usage_count; IPC_LOG_MSG(port->ipc_log_misc, "%s\n", __func__); @@ -1458,6 +1459,14 @@ static int stop_rx_sequencer(struct uart_port *uport) IPC_LOG_MSG(port->ipc_log_misc, "%s: Interrupt delay\n", __func__); handle_rx_dma_xfer(s_irq_status, uport); + if (!port->ioctl_count) { + usage_count = atomic_read(&uport->dev->power.usage_count); + IPC_LOG_MSG(port->ipc_log_misc, + "%s: Abort Stop Rx, extend the PM timer, usage_count:%d\n", + __func__, usage_count); + pm_runtime_mark_last_busy(uport->dev); + return -EBUSY; + } } }