All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
To: Sasha Levin <sashal@kernel.org>
Cc: stable-commits@vger.kernel.org,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Jiri Slaby <jirislaby@kernel.org>,
	stable@vger.kernel.org
Subject: Re: Patch "serial: Store character timing information to uart_port" has been added to the 5.18-stable tree
Date: Mon, 15 Aug 2022 13:54:32 +0300 (EEST)	[thread overview]
Message-ID: <1119a468-deef-8edb-ac92-ae02c18ca22@linux.intel.com> (raw)
In-Reply-To: <20220813215542.1973126-1-sashal@kernel.org>

[-- Attachment #1: Type: text/plain, Size: 4129 bytes --]

On Sat, 13 Aug 2022, Sasha Levin wrote:

> This is a note to let you know that I've just added the patch titled
> 
>     serial: Store character timing information to uart_port
> 
> to the 5.18-stable tree which can be found at:
>     http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
> 
> The filename of the patch is:
>      serial-store-character-timing-information-to-uart_po.patch
> and it can be found in the queue-5.18 subdirectory.
> 
> If you, or anyone else, feels it should not be added to the stable tree,
> please let <stable@vger.kernel.org> know about it.
>
> commit 5517053a2e0b30a1e35f90504446af4a2c4920e8
> Author: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
> Date:   Mon Apr 25 17:33:58 2022 +0300
> 
>     serial: Store character timing information to uart_port
>     
>     [ Upstream commit 31f6bd7fad3b149a1eb6f67fc2e742e4df369b3d ]
>     
>     Struct uart_port currently stores FIFO timeout. Having character timing
>     information readily available is useful. Even serial core itself
>     determines char_time from port->timeout using inverse calculation.
>     
>     Store frame_time directly into uart_port. Character time is stored in
>     nanoseconds to have reasonable precision with high rates. To avoid
>     overflow, 64-bit math is necessary.
>     
>     It might be possible to determine timeout from frame_time by
>     multiplying it with fifosize as needed but only part of the users seem
>     to be protected by a lock. Thus, this patch does not pursue storing
>     only frame_time in uart_port.
>     
>     Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
>     Link: https://lore.kernel.org/r/20220425143410.12703-2-ilpo.jarvinen@linux.intel.com
>     Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
>     Signed-off-by: Sasha Levin <sashal@kernel.org>
> 
> diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
> index 95d8d1fcd543..6b07b7b41354 100644
> --- a/drivers/tty/serial/serial_core.c
> +++ b/drivers/tty/serial/serial_core.c
> @@ -24,6 +24,7 @@
>  #include <linux/sysrq.h>
>  #include <linux/delay.h>
>  #include <linux/mutex.h>
> +#include <linux/math64.h>
>  #include <linux/security.h>
>  
>  #include <linux/irq.h>
> @@ -333,15 +334,18 @@ void
>  uart_update_timeout(struct uart_port *port, unsigned int cflag,
>  		    unsigned int baud)
>  {
> -	unsigned int size;
> +	unsigned int size = tty_get_frame_size(cflag);
> +	u64 frame_time;
>  
> -	size = tty_get_frame_size(cflag) * port->fifosize;
> +	frame_time = (u64)size * NSEC_PER_SEC;
> +	size *= port->fifosize;
>  
>  	/*
>  	 * Figure the timeout to send the above number of bits.
>  	 * Add .02 seconds of slop
>  	 */
>  	port->timeout = (HZ * size) / baud + HZ/50;
> +	port->frame_time = DIV64_U64_ROUND_UP(frame_time, baud);
>  }
>  EXPORT_SYMBOL(uart_update_timeout);
>  
> @@ -1610,10 +1614,8 @@ static void uart_wait_until_sent(struct tty_struct *tty, int timeout)
>  	 * Note: we have to use pretty tight timings here to satisfy
>  	 * the NIST-PCTS.
>  	 */
> -	char_time = (port->timeout - HZ/50) / port->fifosize;
> -	char_time = char_time / 5;
> -	if (char_time == 0)
> -		char_time = 1;
> +	char_time = max(nsecs_to_jiffies(port->frame_time / 5), 1UL);
> +
>  	if (timeout && timeout < char_time)
>  		char_time = timeout;
>  
> diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h
> index ca57d686d4d1..409573ea5ea4 100644
> --- a/include/linux/serial_core.h
> +++ b/include/linux/serial_core.h
> @@ -232,6 +232,7 @@ struct uart_port {
>  	int			hw_stopped;		/* sw-assisted CTS flow state */
>  	unsigned int		mctrl;			/* current modem ctrl settings */
>  	unsigned int		timeout;		/* character-based timeout */
> +	unsigned int		frame_time;		/* frame timing in ns */
>  	unsigned int		type;			/* port type */
>  	const struct uart_ops	*ops;
>  	unsigned int		custom_divisor;
> 

Why is this change necessary for stable? The change was made simply to 
make some other feature changes following a lot simpler but I don't think 
there is any known bug/issue it would be fixing.

-- 
 i.

       reply	other threads:[~2022-08-15 10:54 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20220813215542.1973126-1-sashal@kernel.org>
2022-08-15 10:54 ` Ilpo Järvinen [this message]
2022-08-15 12:44   ` Patch "serial: Store character timing information to uart_port" has been added to the 5.18-stable tree Greg Kroah-Hartman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1119a468-deef-8edb-ac92-ae02c18ca22@linux.intel.com \
    --to=ilpo.jarvinen@linux.intel.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jirislaby@kernel.org \
    --cc=sashal@kernel.org \
    --cc=stable-commits@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.