From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sergei Shtylyov Date: Sun, 15 Mar 2015 15:30:58 +0000 Subject: Re: [PATCH/RFC] serial: sh-sci: Update calculation of timeout for DMA Message-Id: <5505A5B2.2020600@cogentembedded.com> List-Id: References: <1426429742-3041-1-git-send-email-ykaneko0929@gmail.com> In-Reply-To: <1426429742-3041-1-git-send-email-ykaneko0929@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: Yoshihiro Kaneko , linux-serial@vger.kernel.org Cc: Greg Kroah-Hartman , Simon Horman , Magnus Damm , linux-sh@vger.kernel.org On 3/15/2015 5:29 PM, Yoshihiro Kaneko wrote: > From: Nobuhiro Iwamatsu > The current calculation method in the case of 9600bps, rounding error occurs > has become setting that occur timeout faster than the required time. When we > use 9600bps, 32byte buffer, 10 bit (CS8) and 100 HZ, it becomes 3 jiffies > (30msec). In fact it is necessary 33msec. This updates to the calculation > that are not actually less than the value set by the rounding error. > Also, this is nothing will be calculated value when there is no load. If there > are a lot of case load, overrun error will occur immediately. > This is by the buffer size to be calculated twice the DMA buffer, and add the > change of setting a sufficient time-out value. > Signedroff-by: Nobuhiro Iwamatsu > Signed-off-by: Yoshihiro Kaneko > --- > This patch is based on the tty-next branch of Greg Kroah-Hartman's tty > tree. > drivers/tty/serial/sh-sci.c | 38 ++++++++++++++++++++++++++++++-------- > 1 file changed, 30 insertions(+), 8 deletions(-) > diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c > index 5b50c79..891116c 100644 > --- a/drivers/tty/serial/sh-sci.c > +++ b/drivers/tty/serial/sh-sci.c > @@ -1967,18 +1967,40 @@ static void sci_set_termios(struct uart_port *port, struct ktermios *termios, [...] > if (s->chan_rx) { > - s->rx_timeout = (port->timeout - HZ / 50) * s->buf_len_rx * 3 / > - port->fifosize / 2; > + unsigned int bits; > + > + /* byte size and parity */ > + switch (termios->c_cflag & CSIZE) { > + case CS5: *case* should at the same indentation level as *switch*. I guess you haven't run the patch thru scripts/checkpatch.pl? > + bits = 7; > + break; > + case CS6: > + bits = 8; > + break; > + case CS7: > + bits = 9; > + break; > + default: > + bits = 10; > + break; > + } [...] WBR, Sergei