Separate the port-locked completion processing from the DMA callback
wrapper. Keep the shutdown check and locking in the callback, and retain
the existing FIFO accounting, delayed register restore and THRI handling
in the helper.

Signed-off-by: James Hilliard <[email protected]>
---
 drivers/tty/serial/8250/8250_omap.c | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/drivers/tty/serial/8250/8250_omap.c 
b/drivers/tty/serial/8250/8250_omap.c
index 4805b644ccb1..b6f108d34854 100644
--- a/drivers/tty/serial/8250/8250_omap.c
+++ b/drivers/tty/serial/8250/8250_omap.c
@@ -1080,18 +1080,13 @@ static int omap_8250_rx_dma(struct uart_8250_port *p)
 
 static int omap_8250_tx_dma(struct uart_8250_port *p);
 
-static void omap_8250_dma_tx_complete(void *param)
+static void omap_8250_tx_dma_complete(struct uart_8250_port *p)
 {
-       struct uart_8250_port   *p = param;
        struct uart_8250_dma    *dma = p->dma;
        struct tty_port         *tport = &p->port.state->port;
        bool                    en_thri = false;
        struct omap8250_priv    *priv = p->port.private_data;
 
-       guard(uart_port_lock_irqsave)(&p->port);
-       if (dma->shutting_down)
-               return;
-
        dma_sync_single_for_cpu(dmaengine_get_dma_device(dma->txchan), 
dma->tx_addr,
                                UART_XMIT_SIZE, DMA_TO_DEVICE);
 
@@ -1123,6 +1118,18 @@ static void omap_8250_dma_tx_complete(void *param)
        }
 }
 
+static void omap_8250_dma_tx_complete(void *param)
+{
+       struct uart_8250_port *p = param;
+       struct uart_8250_dma *dma = p->dma;
+
+       guard(uart_port_lock_irqsave)(&p->port);
+
+       if (dma->shutting_down)
+               return;
+       omap_8250_tx_dma_complete(p);
+}
+
 static int omap_8250_tx_dma(struct uart_8250_port *p)
 {
        struct uart_8250_dma            *dma = p->dma;

-- 
2.53.0


Reply via email to