serial: bfin-uart: Don't access tty circular buffer in TX DMA interrupt after it is reset.
When kernel reboot, tty circular buffer is reset before last TX DMA interrupt is called, while the buffer tail is updated in TX DMA interrupt handler. So, don't update the buffer tail if it is reset. Signed-off-by: Sonic Zhang <sonic.zhang@analog.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
82896210aa
commit
60f4b002ab
|
@ -535,11 +535,13 @@ static irqreturn_t bfin_serial_dma_tx_int(int irq, void *dev_id)
|
||||||
* when start a new tx.
|
* when start a new tx.
|
||||||
*/
|
*/
|
||||||
UART_CLEAR_IER(uart, ETBEI);
|
UART_CLEAR_IER(uart, ETBEI);
|
||||||
xmit->tail = (xmit->tail + uart->tx_count) & (UART_XMIT_SIZE - 1);
|
|
||||||
uart->port.icount.tx += uart->tx_count;
|
uart->port.icount.tx += uart->tx_count;
|
||||||
|
if (!uart_circ_empty(xmit)) {
|
||||||
|
xmit->tail = (xmit->tail + uart->tx_count) & (UART_XMIT_SIZE - 1);
|
||||||
|
|
||||||
if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
|
if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
|
||||||
uart_write_wakeup(&uart->port);
|
uart_write_wakeup(&uart->port);
|
||||||
|
}
|
||||||
|
|
||||||
bfin_serial_dma_tx_chars(uart);
|
bfin_serial_dma_tx_chars(uart);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue