diff --git a/drivers/tty/serial/8250/8250_dma.c b/drivers/tty/serial/8250/8250_dma.c index 95516a15a4410a14d7479f4bff6601e74fefbb69..02333fc17f411514c115f89e87da357635c8cba1 100644 --- a/drivers/tty/serial/8250/8250_dma.c +++ b/drivers/tty/serial/8250/8250_dma.c @@ -43,8 +43,9 @@ static void __dma_rx_complete(void *param) { struct uart_8250_port *p = param; struct uart_8250_dma *dma = p->dma; - struct tty_struct *tty = p->port.state->port.tty; + struct tty_port *tty_port = &p->port.state->port; struct dma_tx_state state; + int count; dma_sync_single_for_cpu(dma->rxchan->device->dev, dma->rx_addr, dma->rx_size, DMA_FROM_DEVICE); @@ -52,10 +53,12 @@ static void __dma_rx_complete(void *param) dmaengine_tx_status(dma->rxchan, dma->rx_cookie, &state); dmaengine_terminate_all(dma->rxchan); - tty_insert_flip_string(tty, dma->rx_buf, dma->rx_size - state.residue); - p->port.icount.rx += dma->rx_size - state.residue; + count = dma->rx_size - state.residue; - tty_flip_buffer_push(tty); + tty_insert_flip_string(tty_port, dma->rx_buf, count); + p->port.icount.rx += count; + + tty_flip_buffer_push(tty_port); } int serial8250_tx_dma(struct uart_8250_port *p)