Merge tag 'pci-v5.18-changes-2' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / drivers / tty / serial / 8250 / 8250_dma.c
index 890fa7ddaa7f36650a1b69a8554e5567fd674f84..b3c3f7e5851aba3a17ccb7f80f18586c5aac4e4c 100644 (file)
@@ -64,10 +64,19 @@ int serial8250_tx_dma(struct uart_8250_port *p)
        struct uart_8250_dma            *dma = p->dma;
        struct circ_buf                 *xmit = &p->port.state->xmit;
        struct dma_async_tx_descriptor  *desc;
+       struct uart_port                *up = &p->port;
        int ret;
 
-       if (dma->tx_running)
+       if (dma->tx_running) {
+               if (up->x_char) {
+                       dmaengine_pause(dma->txchan);
+                       uart_xchar_out(up, UART_TX);
+                       dmaengine_resume(dma->txchan);
+               }
                return 0;
+       } else if (up->x_char) {
+               uart_xchar_out(up, UART_TX);
+       }
 
        if (uart_tx_stopped(&p->port) || uart_circ_empty(xmit)) {
                /* We have been called from __dma_tx_complete() */