]> git.baikalelectronics.ru Git - kernel.git/commitdiff
tick: Get rid of tick_period
authorThomas Gleixner <tglx@linutronix.de>
Tue, 17 Nov 2020 13:19:49 +0000 (14:19 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 17 May 2023 09:35:40 +0000 (11:35 +0200)
[ Upstream commit 42fdb3c5592517a6c0cc9e5966ef36d4acb594ab ]

The variable tick_period is initialized to NSEC_PER_TICK / HZ during boot
and never updated again.

If NSEC_PER_TICK is not an integer multiple of HZ this computation is less
accurate than TICK_NSEC which has proper rounding in place.

Aside of the inaccuracy there is no reason for having this variable at
all. It's just a pointless indirection and all usage sites can just use the
TICK_NSEC constant.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/r/20201117132006.766643526@linutronix.de
Stable-dep-of: e9523a0d8189 ("tick/common: Align tick period with the HZ tick.")
Signed-off-by: Sasha Levin <sashal@kernel.org>
kernel/time/tick-broadcast.c
kernel/time/tick-common.c
kernel/time/tick-internal.h
kernel/time/tick-sched.c

index e51778c312f1c51e722a3aa914be71ca94c42885..ce7339ff10d2252cf067cb833a12edec6726a142 100644 (file)
@@ -331,7 +331,7 @@ static void tick_handle_periodic_broadcast(struct clock_event_device *dev)
        bc_local = tick_do_periodic_broadcast();
 
        if (clockevent_state_oneshot(dev)) {
-               ktime_t next = ktime_add(dev->next_event, tick_period);
+               ktime_t next = ktime_add_ns(dev->next_event, TICK_NSEC);
 
                clockevents_program_event(dev, next, true);
        }
index 6c9c342dd0e53a70970b7daf1218af0917a24985..92bf99d558b48dfb5aeed55c48b9c83fec6454e1 100644 (file)
@@ -30,7 +30,6 @@ DEFINE_PER_CPU(struct tick_device, tick_cpu_device);
  * Tick next event: keeps track of the tick time
  */
 ktime_t tick_next_period;
-ktime_t tick_period;
 
 /*
  * tick_do_timer_cpu is a timer core internal variable which holds the CPU NR
@@ -88,7 +87,7 @@ static void tick_periodic(int cpu)
                write_seqcount_begin(&jiffies_seq);
 
                /* Keep track of the next tick event */
-               tick_next_period = ktime_add(tick_next_period, tick_period);
+               tick_next_period = ktime_add_ns(tick_next_period, TICK_NSEC);
 
                do_timer(1);
                write_seqcount_end(&jiffies_seq);
@@ -127,7 +126,7 @@ void tick_handle_periodic(struct clock_event_device *dev)
                 * Setup the next period for devices, which do not have
                 * periodic mode:
                 */
-               next = ktime_add(next, tick_period);
+               next = ktime_add_ns(next, TICK_NSEC);
 
                if (!clockevents_program_event(dev, next, false))
                        return;
@@ -173,7 +172,7 @@ void tick_setup_periodic(struct clock_event_device *dev, int broadcast)
                for (;;) {
                        if (!clockevents_program_event(dev, next, false))
                                return;
-                       next = ktime_add(next, tick_period);
+                       next = ktime_add_ns(next, TICK_NSEC);
                }
        }
 }
@@ -220,7 +219,6 @@ static void tick_setup_device(struct tick_device *td,
                        tick_do_timer_cpu = cpu;
 
                        tick_next_period = ktime_get();
-                       tick_period = NSEC_PER_SEC / HZ;
 #ifdef CONFIG_NO_HZ_FULL
                        /*
                         * The boot CPU may be nohz_full, in which case set
index 5294f5b1f955015cc41cb8443716eaed1b3e1166..e61c1244e7d464c0fdc6c2facb664bf33ac5748a 100644 (file)
@@ -15,7 +15,6 @@
 
 DECLARE_PER_CPU(struct tick_device, tick_cpu_device);
 extern ktime_t tick_next_period;
-extern ktime_t tick_period;
 extern int tick_do_timer_cpu __read_mostly;
 
 extern void tick_setup_periodic(struct clock_event_device *dev, int broadcast);
index 3b00167656d78107cb3877bdc67638f876575892..1b5037ba4ec40c3f64127a386d04d91b8f755447 100644 (file)
@@ -92,17 +92,17 @@ static void tick_do_update_jiffies64(ktime_t now)
        write_seqcount_begin(&jiffies_seq);
 
        delta = ktime_sub(now, tick_next_period);
-       if (unlikely(delta >= tick_period)) {
+       if (unlikely(delta >= TICK_NSEC)) {
                /* Slow path for long idle sleep times */
-               s64 incr = ktime_to_ns(tick_period);
+               s64 incr = TICK_NSEC;
 
                ticks += ktime_divns(delta, incr);
 
                last_jiffies_update = ktime_add_ns(last_jiffies_update,
                                                   incr * ticks);
        } else {
-               last_jiffies_update = ktime_add(last_jiffies_update,
-                                               tick_period);
+               last_jiffies_update = ktime_add_ns(last_jiffies_update,
+                                                  TICK_NSEC);
        }
 
        do_timer(ticks);
@@ -112,7 +112,7 @@ static void tick_do_update_jiffies64(ktime_t now)
         * pairs with the READ_ONCE() in the lockless quick check above.
         */
        WRITE_ONCE(tick_next_period,
-                  ktime_add(last_jiffies_update, tick_period));
+                  ktime_add_ns(last_jiffies_update, TICK_NSEC));
 
        write_seqcount_end(&jiffies_seq);
        raw_spin_unlock(&jiffies_lock);
@@ -659,7 +659,7 @@ static void tick_nohz_restart(struct tick_sched *ts, ktime_t now)
        hrtimer_set_expires(&ts->sched_timer, ts->last_tick);
 
        /* Forward the time to expire in the future */
-       hrtimer_forward(&ts->sched_timer, now, tick_period);
+       hrtimer_forward(&ts->sched_timer, now, TICK_NSEC);
 
        if (ts->nohz_mode == NOHZ_MODE_HIGHRES) {
                hrtimer_start_expires(&ts->sched_timer,
@@ -1221,7 +1221,7 @@ static void tick_nohz_handler(struct clock_event_device *dev)
        if (unlikely(ts->tick_stopped))
                return;
 
-       hrtimer_forward(&ts->sched_timer, now, tick_period);
+       hrtimer_forward(&ts->sched_timer, now, TICK_NSEC);
        tick_program_event(hrtimer_get_expires(&ts->sched_timer), 1);
 }
 
@@ -1258,7 +1258,7 @@ static void tick_nohz_switch_to_nohz(void)
        next = tick_init_jiffy_update();
 
        hrtimer_set_expires(&ts->sched_timer, next);
-       hrtimer_forward_now(&ts->sched_timer, tick_period);
+       hrtimer_forward_now(&ts->sched_timer, TICK_NSEC);
        tick_program_event(hrtimer_get_expires(&ts->sched_timer), 1);
        tick_nohz_activate(ts, NOHZ_MODE_LOWRES);
 }
@@ -1324,7 +1324,7 @@ static enum hrtimer_restart tick_sched_timer(struct hrtimer *timer)
        if (unlikely(ts->tick_stopped))
                return HRTIMER_NORESTART;
 
-       hrtimer_forward(timer, now, tick_period);
+       hrtimer_forward(timer, now, TICK_NSEC);
 
        return HRTIMER_RESTART;
 }
@@ -1358,13 +1358,13 @@ void tick_setup_sched_timer(void)
 
        /* Offset the tick to avert jiffies_lock contention. */
        if (sched_skew_tick) {
-               u64 offset = ktime_to_ns(tick_period) >> 1;
+               u64 offset = TICK_NSEC >> 1;
                do_div(offset, num_possible_cpus());
                offset *= smp_processor_id();
                hrtimer_add_expires_ns(&ts->sched_timer, offset);
        }
 
-       hrtimer_forward(&ts->sched_timer, now, tick_period);
+       hrtimer_forward(&ts->sched_timer, now, TICK_NSEC);
        hrtimer_start_expires(&ts->sched_timer, HRTIMER_MODE_ABS_PINNED_HARD);
        tick_nohz_activate(ts, NOHZ_MODE_HIGHRES);
 }