[PATCH] timers: Remove historical extra jiffie for timeout in msleep()

Anna-Maria Behnsen posted 1 patch 1 year, 3 months ago
There is a newer version of this series
kernel/time/timer.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
[PATCH] timers: Remove historical extra jiffie for timeout in msleep()
Posted by Anna-Maria Behnsen 1 year, 3 months ago
msleep() as well as msleep_interruptible() add a jiffie to the
timeout. This extra jiffie was introduced in former days to ensure timeout
will not happen earlier than specified. But the timer wheel already takes
care during enqueue that timers will not expire earlier than specified.

Remove this extra jiffie in msleep() and msleep_interruptible().

Signed-off-by: Anna-Maria Behnsen <anna-maria@linutronix.de>
---
 kernel/time/timer.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/kernel/time/timer.c b/kernel/time/timer.c
index 64b0d8a0aa0f..18aa759c3cae 100644
--- a/kernel/time/timer.c
+++ b/kernel/time/timer.c
@@ -2730,7 +2730,7 @@ void __init init_timers(void)
  */
 void msleep(unsigned int msecs)
 {
-	unsigned long timeout = msecs_to_jiffies(msecs) + 1;
+	unsigned long timeout = msecs_to_jiffies(msecs);
 
 	while (timeout)
 		timeout = schedule_timeout_uninterruptible(timeout);
@@ -2744,7 +2744,7 @@ EXPORT_SYMBOL(msleep);
  */
 unsigned long msleep_interruptible(unsigned int msecs)
 {
-	unsigned long timeout = msecs_to_jiffies(msecs) + 1;
+	unsigned long timeout = msecs_to_jiffies(msecs);
 
 	while (timeout && !signal_pending(current))
 		timeout = schedule_timeout_interruptible(timeout);
-- 
2.39.2
Re: [PATCH] timers: Remove historical extra jiffie for timeout in msleep()
Posted by Len Brown 1 year, 3 months ago
HZ=250 systems thank you!

Acked-by: Len Brown <len.brown@intel.com>

On Thu, Aug 29, 2024 at 3:41 AM Anna-Maria Behnsen
<anna-maria@linutronix.de> wrote:
>
> msleep() as well as msleep_interruptible() add a jiffie to the
> timeout. This extra jiffie was introduced in former days to ensure timeout
> will not happen earlier than specified. But the timer wheel already takes
> care during enqueue that timers will not expire earlier than specified.
>
> Remove this extra jiffie in msleep() and msleep_interruptible().
>
> Signed-off-by: Anna-Maria Behnsen <anna-maria@linutronix.de>
> ---
>  kernel/time/timer.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/kernel/time/timer.c b/kernel/time/timer.c
> index 64b0d8a0aa0f..18aa759c3cae 100644
> --- a/kernel/time/timer.c
> +++ b/kernel/time/timer.c
> @@ -2730,7 +2730,7 @@ void __init init_timers(void)
>   */
>  void msleep(unsigned int msecs)
>  {
> -       unsigned long timeout = msecs_to_jiffies(msecs) + 1;
> +       unsigned long timeout = msecs_to_jiffies(msecs);
>
>         while (timeout)
>                 timeout = schedule_timeout_uninterruptible(timeout);
> @@ -2744,7 +2744,7 @@ EXPORT_SYMBOL(msleep);
>   */
>  unsigned long msleep_interruptible(unsigned int msecs)
>  {
> -       unsigned long timeout = msecs_to_jiffies(msecs) + 1;
> +       unsigned long timeout = msecs_to_jiffies(msecs);
>
>         while (timeout && !signal_pending(current))
>                 timeout = schedule_timeout_interruptible(timeout);
> --
> 2.39.2
>


-- 
Len Brown, Intel
Re: [PATCH] timers: Remove historical extra jiffie for timeout in msleep()
Posted by Rafael J. Wysocki 1 year, 3 months ago
On Thu, Aug 29, 2024 at 9:41 AM Anna-Maria Behnsen
<anna-maria@linutronix.de> wrote:
>
> msleep() as well as msleep_interruptible() add a jiffie to the
> timeout. This extra jiffie was introduced in former days to ensure timeout
> will not happen earlier than specified. But the timer wheel already takes
> care during enqueue that timers will not expire earlier than specified.
>
> Remove this extra jiffie in msleep() and msleep_interruptible().
>
> Signed-off-by: Anna-Maria Behnsen <anna-maria@linutronix.de>

Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

> ---
>  kernel/time/timer.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/kernel/time/timer.c b/kernel/time/timer.c
> index 64b0d8a0aa0f..18aa759c3cae 100644
> --- a/kernel/time/timer.c
> +++ b/kernel/time/timer.c
> @@ -2730,7 +2730,7 @@ void __init init_timers(void)
>   */
>  void msleep(unsigned int msecs)
>  {
> -       unsigned long timeout = msecs_to_jiffies(msecs) + 1;
> +       unsigned long timeout = msecs_to_jiffies(msecs);
>
>         while (timeout)
>                 timeout = schedule_timeout_uninterruptible(timeout);
> @@ -2744,7 +2744,7 @@ EXPORT_SYMBOL(msleep);
>   */
>  unsigned long msleep_interruptible(unsigned int msecs)
>  {
> -       unsigned long timeout = msecs_to_jiffies(msecs) + 1;
> +       unsigned long timeout = msecs_to_jiffies(msecs);
>
>         while (timeout && !signal_pending(current))
>                 timeout = schedule_timeout_interruptible(timeout);
> --
> 2.39.2
>
[tip: timers/core] timers: Remove historical extra jiffie for timeout in msleep()
Posted by tip-bot2 for Anna-Maria Behnsen 1 year, 3 months ago
The following commit has been merged into the timers/core branch of tip:

Commit-ID:     4381b895f544bb84b8cfb34ada64df67c9b2a4f0
Gitweb:        https://git.kernel.org/tip/4381b895f544bb84b8cfb34ada64df67c9b2a4f0
Author:        Anna-Maria Behnsen <anna-maria@linutronix.de>
AuthorDate:    Thu, 29 Aug 2024 09:41:33 +02:00
Committer:     Thomas Gleixner <tglx@linutronix.de>
CommitterDate: Thu, 29 Aug 2024 16:17:18 +02:00

timers: Remove historical extra jiffie for timeout in msleep()

msleep() and msleep_interruptible() add a jiffie to the requested timeout.

This extra jiffie was introduced to ensure that the timeout will not happen
earlier than specified.

Since the rework of the timer wheel, the enqueue path already takes care of
this. So the extra jiffie added by msleep*() is pointless now.

Remove this extra jiffie in msleep() and msleep_interruptible().

Signed-off-by: Anna-Maria Behnsen <anna-maria@linutronix.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Link: https://lore.kernel.org/all/20240829074133.4547-1-anna-maria@linutronix.de
---
 kernel/time/timer.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/kernel/time/timer.c b/kernel/time/timer.c
index 429232d..d8eb368 100644
--- a/kernel/time/timer.c
+++ b/kernel/time/timer.c
@@ -2732,7 +2732,7 @@ void __init init_timers(void)
  */
 void msleep(unsigned int msecs)
 {
-	unsigned long timeout = msecs_to_jiffies(msecs) + 1;
+	unsigned long timeout = msecs_to_jiffies(msecs);
 
 	while (timeout)
 		timeout = schedule_timeout_uninterruptible(timeout);
@@ -2746,7 +2746,7 @@ EXPORT_SYMBOL(msleep);
  */
 unsigned long msleep_interruptible(unsigned int msecs)
 {
-	unsigned long timeout = msecs_to_jiffies(msecs) + 1;
+	unsigned long timeout = msecs_to_jiffies(msecs);
 
 	while (timeout && !signal_pending(current))
 		timeout = schedule_timeout_interruptible(timeout);