Messages in this thread | | | Date | Thu, 13 Jan 2022 08:23:41 +0100 | Subject | Re: [PATCH V3] tty: serial: fsl_lpuart: count tty buffer overruns | From | Jiri Slaby <> |
| |
On 11. 01. 22, 9:51, Sherry Sun wrote: > Added support for counting the tty buffer overruns in fsl_lpuart driver > like other uart drivers. > > Signed-off-by: Sherry Sun <sherry.sun@nxp.com>
Reviewed-by: Jiri Slaby <jirislaby@kernel.org>
> --- > changes in V3 > > 1. Remove the initialization for copied as it is not necessary. > --- > drivers/tty/serial/fsl_lpuart.c | 20 +++++++++++++------- > 1 file changed, 13 insertions(+), 7 deletions(-) > > diff --git a/drivers/tty/serial/fsl_lpuart.c b/drivers/tty/serial/fsl_lpuart.c > index ce3e26144689..7d90c5a530ee 100644 > --- a/drivers/tty/serial/fsl_lpuart.c > +++ b/drivers/tty/serial/fsl_lpuart.c > @@ -931,7 +931,8 @@ static void lpuart_rxint(struct lpuart_port *sport) > sport->port.sysrq = 0; > } > > - tty_insert_flip_char(port, rx, flg); > + if (tty_insert_flip_char(port, rx, flg) == 0) > + sport->port.icount.buf_overrun++; > } > > out: > @@ -1024,7 +1025,8 @@ static void lpuart32_rxint(struct lpuart_port *sport) > flg = TTY_OVERRUN; > } > > - tty_insert_flip_char(port, rx, flg); > + if (tty_insert_flip_char(port, rx, flg) == 0) > + sport->port.icount.buf_overrun++; > } > > out: > @@ -1116,7 +1118,7 @@ static void lpuart_copy_rx_to_tty(struct lpuart_port *sport) > struct dma_chan *chan = sport->dma_rx_chan; > struct circ_buf *ring = &sport->rx_ring; > unsigned long flags; > - int count = 0; > + int count = 0, copied; > > if (lpuart_is_32(sport)) { > unsigned long sr = lpuart32_read(&sport->port, UARTSTAT); > @@ -1218,20 +1220,24 @@ static void lpuart_copy_rx_to_tty(struct lpuart_port *sport) > if (ring->head < ring->tail) { > count = sport->rx_sgl.length - ring->tail; > > - tty_insert_flip_string(port, ring->buf + ring->tail, count); > + copied = tty_insert_flip_string(port, ring->buf + ring->tail, count); > + if (copied != count) > + sport->port.icount.buf_overrun++; > ring->tail = 0; > - sport->port.icount.rx += count; > + sport->port.icount.rx += copied; > } > > /* Finally we read data from tail to head */ > if (ring->tail < ring->head) { > count = ring->head - ring->tail; > - tty_insert_flip_string(port, ring->buf + ring->tail, count); > + copied = tty_insert_flip_string(port, ring->buf + ring->tail, count); > + if (copied != count) > + sport->port.icount.buf_overrun++; > /* Wrap ring->head if needed */ > if (ring->head >= sport->rx_sgl.length) > ring->head = 0; > ring->tail = ring->head; > - sport->port.icount.rx += count; > + sport->port.icount.rx += copied; > } > > exit:
-- js suse labs
| |