Re: [patch V3 11/51] posix-cpu-timers: Handle SIGEV_NONE timers correctly in timer_set()

From: Frederic Weisbecker
Date: Sat Jun 22 2024 - 10:35:42 EST


Le Mon, Jun 10, 2024 at 06:42:18PM +0200, Thomas Gleixner a écrit :
> Expired SIGEV_NONE oneshot timers must return 0 nsec for the expiry time in
> timer_get(), but the posix CPU timer implementation returns 1 nsec.
>
> Add the missing conditional.
>
> This will be cleaned up in a follow up patch.
>
> Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> ---
> V2: Split out into new patch to make review simpler - Frederic
> ---
> kernel/time/posix-cpu-timers.c | 11 ++++++++++-
> 1 file changed, 10 insertions(+), 1 deletion(-)
>
> --- a/kernel/time/posix-cpu-timers.c
> +++ b/kernel/time/posix-cpu-timers.c
> @@ -706,7 +706,16 @@ static int posix_cpu_timer_set(struct k_
> old_expires = exp - val;
> old->it_value = ns_to_timespec64(old_expires);
> } else {
> - old->it_value.tv_nsec = 1;
> + /*
> + * A single shot SIGEV_NONE timer must return 0, when it is
> + * expired! Timers which have a real signal delivery mode
> + * must return a remaining time greater than 0 because the
> + * signal has not yet been delivered.
> + */
> + if (sigev_none)

Does this patch build? The sigev_none variable doesn't seem to exist.

Thanks.

> + old->it_value.tv_nsec = 0;
> + else
> + old->it_value.tv_nsec = 1;
> old->it_value.tv_sec = 0;
> }
> }
>