All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stafford Horne <shorne@gmail.com>
To: Frederic Weisbecker <frederic@kernel.org>
Cc: Thomas Gleixner <tglx@linutronix.de>,
	LKML <linux-kernel@vger.kernel.org>,
	Victor Stinner <vstinner@redhat.com>,
	Peter Zijlstra <peterz@infradead.org>,
	GLIBC patches <libc-alpha@sourceware.org>
Subject: Re: [PATCH] posix-cpu-timers: Fix spuriously armed 0-value itimer
Date: Sun, 26 Sep 2021 21:58:35 +0900	[thread overview]
Message-ID: <YVBue6owgaW31Kdz@antec> (raw)
In-Reply-To: <20210913145332.232023-1-frederic@kernel.org>

Hello,

Ccing libc-alpha,

On Mon, Sep 13, 2021 at 04:53:32PM +0200, Frederic Weisbecker wrote:
> Resetting/stopping an itimer eventually leads to it being reprogrammed
> with an actual "0" value. As a result the itimer expires on the next
> tick, triggering an unexpected signal.

Thanks for this I just tracked down the same issue.

I just wanted to give an FYI in case anyone else notices this.

This was causing gprof (gcc -pg) to fail.  I noticed this when running the glibc
test suite, tests: gmon/tst-gmon-static, gmon/tst-gmon

Gprof uses ITIMER_PROF, as per:

 - https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/posix/profil.c;h=fbf1184df1ccc6e1d2098f92c7d87fc28f5a8f09;hb=HEAD

I was seeing the extra SIGPROF signal after profil de-registered the timer and
signal handler.  The spurious signal causes all profiled programs to be killed
and collect no gprof data.

-Stafford

> To fix this, make sure that
> struct signal_struct::it[CPUCLOCK_PROF/VIRT]::expires is set to 0 when
> setitimer() passes a 0 it_value, indicating that the timer must stop.
> 
> Reported-by: Victor Stinner <vstinner@redhat.com>
> Fixes: 406dd42bd1ba ("posix-cpu-timers: Force next expiration recalc after itimer reset")
> Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
> Cc: Peter Zijlstra (Intel) <peterz@infradead.org>
> ---
>  kernel/time/posix-cpu-timers.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/kernel/time/posix-cpu-timers.c b/kernel/time/posix-cpu-timers.c
> index ee736861b18f..643d412ac623 100644
> --- a/kernel/time/posix-cpu-timers.c
> +++ b/kernel/time/posix-cpu-timers.c
> @@ -1404,7 +1404,8 @@ void set_process_cpu_timer(struct task_struct *tsk, unsigned int clkid,
>  			}
>  		}
>  
> -		*newval += now;
> +		if (*newval)
> +			*newval += now;
>  	}
>  
>  	/*
> -- 
> 2.25.1
> 

      parent reply	other threads:[~2021-09-26 12:58 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-13 14:53 [PATCH] posix-cpu-timers: Fix spuriously armed 0-value itimer Frederic Weisbecker
2021-09-23  9:57 ` [tip: timers/urgent] posix-cpu-timers: Prevent " tip-bot2 for Frederic Weisbecker
2021-09-26 12:58 ` Stafford Horne [this message]

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=YVBue6owgaW31Kdz@antec \
    --to=shorne@gmail.com \
    --cc=frederic@kernel.org \
    --cc=libc-alpha@sourceware.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    --cc=vstinner@redhat.com \
    /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.