Hi Geert, One bikeshedding below. On Mon, Jun 24, 2019 at 02:35:39PM +0200, Geert Uytterhoeven wrote: [..] > diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c > index abc705716aa094fd..d4504daff99263f5 100644 > --- a/drivers/tty/serial/sh-sci.c > +++ b/drivers/tty/serial/sh-sci.c > @@ -1398,6 +1398,7 @@ static void sci_dma_tx_work_fn(struct work_struct *work) > struct circ_buf *xmit = &port->state->xmit; > unsigned long flags; > dma_addr_t buf; > + int head, tail; > > /* > * DMA is idle now. > @@ -1407,16 +1408,23 @@ static void sci_dma_tx_work_fn(struct work_struct *work) > * consistent xmit buffer state. > */ > spin_lock_irq(&port->lock); > - buf = s->tx_dma_addr + (xmit->tail & (UART_XMIT_SIZE - 1)); > + head = xmit->head; > + tail = xmit->tail; > + buf = s->tx_dma_addr + (tail & (UART_XMIT_SIZE - 1)); > s->tx_dma_len = min_t(unsigned int, > - CIRC_CNT(xmit->head, xmit->tail, UART_XMIT_SIZE), > - CIRC_CNT_TO_END(xmit->head, xmit->tail, UART_XMIT_SIZE)); > - spin_unlock_irq(&port->lock); > + CIRC_CNT(head, tail, UART_XMIT_SIZE), > + CIRC_CNT_TO_END(head, tail, UART_XMIT_SIZE)); > + if (!s->tx_dma_len) { > + /* Transmit buffer has been flushed */ > + spin_unlock_irq(&port->lock); > + return; Since we can now return before using the result stored in 'buf', we could relocate the 'buf' calculation next to the return statement, just before calling dmaengine_prep_slave_single(), as micro-optimization. > + } > > desc = dmaengine_prep_slave_single(chan, buf, s->tx_dma_len, > DMA_MEM_TO_DEV, > DMA_PREP_INTERRUPT | DMA_CTRL_ACK); Otherwise: Reviewed-by: Eugeniu Rosca <erosca@xxxxxxxxxxxxxx> Tested-by: Eugeniu Rosca <erosca@xxxxxxxxxxxxxx> -- Best Regards, Eugeniu.