serial: imx: implement the flush_buffer hook
authorHuang Shijie <b32955@freescale.com>
Fri, 11 Oct 2013 10:30:58 +0000 (18:30 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 16 Oct 2013 20:19:54 +0000 (13:19 -0700)
commiteb56b7edae6ba2bfd3a07e59ea82195e2c1c28ec
tree5fdaab8e8a4e33e2f4b63f6d82629e02a6a0a163
parentfa2b5ea09e48186041f68649ab8192447b31bffc
serial: imx: implement the flush_buffer hook

The current driver does not implement the flush_buffer hook for
uart_ops. When we enable the DMA for the driver, and test it with Bluetooth,
we may meet the following bug for TX:

    [1] User application may call the flush operation at any time.
        The uart_flush_buffer() calls the uart_circ_clear() to set
        the xmit->head and xmit->tail with 0.

    [2] The TX DMA callback can be called at any time too.
        The dma_tx_call() will update the xmit->tail.

    If [2] occurs just after the [1], we will get the wrong xmit->tail.

This patch implements the flush_buffer hook to fix this issue.

Signed-off-by: Huang Shijie <b32955@freescale.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/imx.c