]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
posix-timers: Consolidate signal queueing
authorThomas Gleixner <tglx@linutronix.de>
Mon, 10 Jun 2024 16:42:32 +0000 (18:42 +0200)
committerFrederic Weisbecker <frederic@kernel.org>
Mon, 29 Jul 2024 19:57:35 +0000 (21:57 +0200)
Rename posix_timer_event() to posix_timer_queue_signal() as this is what
the function is about.

Consolidate the requeue pending and deactivation updates into that function
as there is no point in doing this in all incarnations of posix timers.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
kernel/time/alarmtimer.c
kernel/time/posix-cpu-timers.c
kernel/time/posix-timers.c
kernel/time/posix-timers.h

index 5abfa43906732b7868585b3c48ccadde47bc8c03..76bd4fda34726a4bdfbcfc59d2c5ee2a0b667ff6 100644 (file)
@@ -574,15 +574,10 @@ static enum alarmtimer_restart alarm_handle_timer(struct alarm *alarm,
                                            it.alarm.alarmtimer);
        enum alarmtimer_restart result = ALARMTIMER_NORESTART;
        unsigned long flags;
-       int si_private = 0;
 
        spin_lock_irqsave(&ptr->it_lock, flags);
 
-       ptr->it_active = 0;
-       if (ptr->it_interval)
-               si_private = ++ptr->it_requeue_pending;
-
-       if (posix_timer_event(ptr, si_private) && ptr->it_interval) {
+       if (posix_timer_queue_signal(ptr) && ptr->it_interval) {
                /*
                 * Handle ignored signals and rearm the timer. This will go
                 * away once we handle ignored signals proper. Ensure that
index bcc2b83e6666f2c41180be7e386bd01a738e9401..6bcee470405926444e4cdac933858257475027f4 100644 (file)
@@ -598,9 +598,9 @@ static void cpu_timer_fire(struct k_itimer *timer)
                /*
                 * One-shot timer.  Clear it as soon as it's fired.
                 */
-               posix_timer_event(timer, 0);
+               posix_timer_queue_signal(timer);
                cpu_timer_setexpires(ctmr, 0);
-       } else if (posix_timer_event(timer, ++timer->it_requeue_pending)) {
+       } else if (posix_timer_queue_signal(timer)) {
                /*
                 * The signal did not get queued because the signal
                 * was ignored, so we won't get any callback to
index 679be902be7c05ee7a773d11eb9b8a4a454a3869..1cc830ef93a7baaa1a51406f91e6c55932008795 100644 (file)
@@ -277,10 +277,17 @@ void posixtimer_rearm(struct kernel_siginfo *info)
        unlock_timer(timr, flags);
 }
 
-int posix_timer_event(struct k_itimer *timr, int si_private)
+int posix_timer_queue_signal(struct k_itimer *timr)
 {
+       int ret, si_private = 0;
        enum pid_type type;
-       int ret;
+
+       lockdep_assert_held(&timr->it_lock);
+
+       timr->it_active = 0;
+       if (timr->it_interval)
+               si_private = ++timr->it_requeue_pending;
+
        /*
         * FIXME: if ->sigq is queued we can race with
         * dequeue_signal()->posixtimer_rearm().
@@ -309,19 +316,13 @@ int posix_timer_event(struct k_itimer *timr, int si_private)
  */
 static enum hrtimer_restart posix_timer_fn(struct hrtimer *timer)
 {
+       struct k_itimer *timr = container_of(timer, struct k_itimer, it.real.timer);
        enum hrtimer_restart ret = HRTIMER_NORESTART;
-       struct k_itimer *timr;
        unsigned long flags;
-       int si_private = 0;
 
-       timr = container_of(timer, struct k_itimer, it.real.timer);
        spin_lock_irqsave(&timr->it_lock, flags);
 
-       timr->it_active = 0;
-       if (timr->it_interval != 0)
-               si_private = ++timr->it_requeue_pending;
-
-       if (posix_timer_event(timr, si_private)) {
+       if (posix_timer_queue_signal(timr)) {
                /*
                 * The signal was not queued due to SIG_IGN. As a
                 * consequence the timer is not going to be rearmed from
index 630a77b2ec6a19b742e91feee339bd936f1dd78c..4784ea65f6853759abc229fa201b7f37c4a3b468 100644 (file)
@@ -36,7 +36,7 @@ extern const struct k_clock clock_process;
 extern const struct k_clock clock_thread;
 extern const struct k_clock alarm_clock;
 
-int posix_timer_event(struct k_itimer *timr, int si_private);
+int posix_timer_queue_signal(struct k_itimer *timr);
 
 void common_timer_get(struct k_itimer *timr, struct itimerspec64 *cur_setting);
 int common_timer_set(struct k_itimer *timr, int flags,