Hello, On Thu, Nov 12, 2015 at 05:33:56PM +0300, Matwey V. Kornilov wrote: > +static void serial8250_start_tx(struct uart_port *port) > +{ > + struct uart_8250_port *up = up_to_u8250p(port); > + __u32 delay; > + > + serial8250_rpm_get_tx(up); > + > + if (timer_pending(&up->rs485_start_tx_timer)) > + return; I think this is wrong (or at least suboptimal). The .start_tx callback can be called even if transmission is already ongoing. In this case you don't want to restart the rs485_start_tx_timer. > + if ((delay = serial8250_rs485_start_tx(up))) { > + mod_timer(&up->rs485_start_tx_timer, jiffies + delay * HZ / 1000); > + } else { > + __start_tx(port); > + } > +} > + > [...] > diff --git a/include/linux/serial_8250.h b/include/linux/serial_8250.h > index faa0e03..c4905e7 100644 > --- a/include/linux/serial_8250.h > +++ b/include/linux/serial_8250.h > @@ -86,6 +86,8 @@ struct uart_8250_ops { > struct uart_8250_port { > struct uart_port port; > struct timer_list timer; /* "no irq" timer */ > + struct timer_list rs485_start_tx_timer; /* "rs485 start tx" timer */ > + struct timer_list rs485_stop_tx_timer; /* "rs485 stop tx" timer */ Do you really need two timers here? At each point in time there should only be at most one of them active. Best regards Uwe -- Pengutronix e.K. | Uwe Kleine-König | Industrial Linux Solutions | http://www.pengutronix.de/ | -- To unsubscribe from this list: send the line "unsubscribe linux-serial" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html