Skip to content

Commit 24aea4c

Browse files
KAGA-KOKOFrederic Weisbecker
authored andcommitted
posix-cpu-timers: Make k_itimer::it_active consistent
Posix CPU timers are not updating k_itimer::it_active which makes it impossible to base decisions in the common posix timer code on it. Update it when queueing or dequeueing posix CPU timers. Signed-off-by: Thomas Gleixner <[email protected]> Signed-off-by: Frederic Weisbecker <[email protected]> Reviewed-by: Anna-Maria Behnsen <[email protected]> Acked-by: Peter Zijlstra (Intel) <[email protected]>
1 parent 20f1338 commit 24aea4c

File tree

1 file changed

+4
-0
lines changed

1 file changed

+4
-0
lines changed

kernel/time/posix-cpu-timers.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,7 @@ static void disarm_timer(struct k_itimer *timer, struct task_struct *p)
453453
struct cpu_timer *ctmr = &timer->it.cpu;
454454
struct posix_cputimer_base *base;
455455

456+
timer->it_active = 0;
456457
if (!cpu_timer_dequeue(ctmr))
457458
return;
458459

@@ -559,6 +560,7 @@ static void arm_timer(struct k_itimer *timer, struct task_struct *p)
559560
struct cpu_timer *ctmr = &timer->it.cpu;
560561
u64 newexp = cpu_timer_getexpires(ctmr);
561562

563+
timer->it_active = 1;
562564
if (!cpu_timer_enqueue(&base->tqhead, ctmr))
563565
return;
564566

@@ -584,6 +586,7 @@ static void cpu_timer_fire(struct k_itimer *timer)
584586
{
585587
struct cpu_timer *ctmr = &timer->it.cpu;
586588

589+
timer->it_active = 0;
587590
if (unlikely(timer->sigq == NULL)) {
588591
/*
589592
* This a special case for clock_nanosleep,
@@ -668,6 +671,7 @@ static int posix_cpu_timer_set(struct k_itimer *timer, int timer_flags,
668671
ret = TIMER_RETRY;
669672
} else {
670673
cpu_timer_dequeue(ctmr);
674+
timer->it_active = 0;
671675
}
672676

673677
/*

0 commit comments

Comments
 (0)