Lines Matching +full:timeout +full:- +full:idle +full:- +full:ms

1 // SPDX-License-Identifier: GPL-2.0
7 * 1997-01-28 Modified by Finn Arne Gangstad to make timers scale better.
9 * 1997-09-10 Updated NTP code according to technical memorandum Jan '96
11 * 1998-12-24 Fixed a xtime SMP race (we need the xtime_lock rw spinlock to
14 * 1999-03-10 Improved NTP compatibility by Ulrich Windl
15 * 2002-05-31 Move sys_sysinfo here and make its locking sane, Robert Love
16 * 2000-10-05 Implemented scalable SMP per-CPU timer handling.
33 #include <linux/posix-timers.h>
54 #include "tick-internal.h"
85 * timeout timers (networking, disk I/O ...) are canceled before expiry. If
86 * the timeout expires it indicates that normal operation is disturbed, so it
87 * does not matter much whether the timeout comes with a slight delay.
94 * capacity of the last wheel level are force expired at the maximum timeout
106 * 0 0 1 ms 0 ms - 63 ms
107 * 1 64 8 ms 64 ms - 511 ms
108 * 2 128 64 ms 512 ms - 4095 ms (512ms - ~4s)
109 * 3 192 512 ms 4096 ms - 32767 ms (~4s - ~32s)
110 * 4 256 4096 ms (~4s) 32768 ms - 262143 ms (~32s - ~4m)
111 * 5 320 32768 ms (~32s) 262144 ms - 2097151 ms (~4m - ~34m)
112 * 6 384 262144 ms (~4m) 2097152 ms - 16777215 ms (~34m - ~4h)
113 * 7 448 2097152 ms (~34m) 16777216 ms - 134217727 ms (~4h - ~1d)
114 * 8 512 16777216 ms (~4h) 134217728 ms - 1073741822 ms (~1d - ~12d)
118 * 0 0 3 ms 0 ms - 210 ms
119 * 1 64 26 ms 213 ms - 1703 ms (213ms - ~1s)
120 * 2 128 213 ms 1706 ms - 13650 ms (~1s - ~13s)
121 * 3 192 1706 ms (~1s) 13653 ms - 109223 ms (~13s - ~1m)
122 * 4 256 13653 ms (~13s) 109226 ms - 873810 ms (~1m - ~14m)
123 * 5 320 109226 ms (~1m) 873813 ms - 6990503 ms (~14m - ~1h)
124 * 6 384 873813 ms (~14m) 6990506 ms - 55924050 ms (~1h - ~15h)
125 * 7 448 6990506 ms (~1h) 55924053 ms - 447392423 ms (~15h - ~5d)
126 * 8 512 55924053 ms (~15h) 447392426 ms - 3579139406 ms (~5d - ~41d)
130 * 0 0 4 ms 0 ms - 255 ms
131 * 1 64 32 ms 256 ms - 2047 ms (256ms - ~2s)
132 * 2 128 256 ms 2048 ms - 16383 ms (~2s - ~16s)
133 * 3 192 2048 ms (~2s) 16384 ms - 131071 ms (~16s - ~2m)
134 * 4 256 16384 ms (~16s) 131072 ms - 1048575 ms (~2m - ~17m)
135 * 5 320 131072 ms (~2m) 1048576 ms - 8388607 ms (~17m - ~2h)
136 * 6 384 1048576 ms (~17m) 8388608 ms - 67108863 ms (~2h - ~18h)
137 * 7 448 8388608 ms (~2h) 67108864 ms - 536870911 ms (~18h - ~6d)
138 * 8 512 67108864 ms (~18h) 536870912 ms - 4294967288 ms (~6d - ~49d)
142 * 0 0 10 ms 0 ms - 630 ms
143 * 1 64 80 ms 640 ms - 5110 ms (640ms - ~5s)
144 * 2 128 640 ms 5120 ms - 40950 ms (~5s - ~40s)
145 * 3 192 5120 ms (~5s) 40960 ms - 327670 ms (~40s - ~5m)
146 * 4 256 40960 ms (~40s) 327680 ms - 2621430 ms (~5m - ~43m)
147 * 5 320 327680 ms (~5m) 2621440 ms - 20971510 ms (~43m - ~5h)
148 * 6 384 2621440 ms (~43m) 20971520 ms - 167772150 ms (~5h - ~1d)
149 * 7 448 20971520 ms (~5h) 167772160 ms - 1342177270 ms (~1d - ~15d)
155 #define LVL_CLK_MASK (LVL_CLK_DIV - 1)
164 #define LVL_START(n) ((LVL_SIZE - 1) << (((n) - 1) * LVL_CLK_SHIFT))
169 #define LVL_MASK (LVL_SIZE - 1)
181 #define WHEEL_TIMEOUT_MAX (WHEEL_TIMEOUT_CUTOFF - LVL_GRAN(LVL_DEPTH - 1))
206 * struct timer_base - Per CPU timer base (number of base depends on config)
236 * @is_idle: Is set, when timer_base is idle. It is triggered by NOHZ
239 * never wake up an idle CPU. So no matter of supporting it
374 j = j - rem; in round_jiffies_common()
376 j = j - rem + HZ; in round_jiffies_common()
379 j -= cpu * 3; in round_jiffies_common()
389 * __round_jiffies - function to round jiffies to a full second
391 * @cpu: the processor number on which the timeout will happen
415 * __round_jiffies_relative - function to round jiffies to a full second
417 * @cpu: the processor number on which the timeout will happen
439 return round_jiffies_common(j + j0, cpu, false) - j0; in __round_jiffies_relative()
444 * round_jiffies - function to round jiffies to a full second
465 * round_jiffies_relative - function to round jiffies to a full second
486 * __round_jiffies_up - function to round jiffies up to a full second
488 * @cpu: the processor number on which the timeout will happen
502 * __round_jiffies_up_relative - function to round jiffies up to a full second
504 * @cpu: the processor number on which the timeout will happen
516 return round_jiffies_common(j + j0, cpu, true) - j0; in __round_jiffies_up_relative()
521 * round_jiffies_up - function to round jiffies up to a full second
536 * round_jiffies_up_relative - function to round jiffies up to a full second
553 return (timer->flags & TIMER_ARRAYMASK) >> TIMER_ARRAYSHIFT; in timer_get_idx()
558 timer->flags = (timer->flags & ~TIMER_ARRAYMASK) | in timer_set_idx()
573 * - Timer is armed at the edge of a tick in calc_index()
574 * - Truncation of the expiry time in the outer wheel levels in calc_index()
586 unsigned long delta = expires - clk; in calc_wheel_index()
616 idx = calc_index(expires, LVL_DEPTH - 1, bucket_expiry); in calc_wheel_index()
626 * are not taken into account on the idle/nohz_full path. An IPI when a in trigger_dyntick_cpu()
631 if (!is_timers_nohz_active() || timer->flags & TIMER_DEFERRABLE) in trigger_dyntick_cpu()
635 * We might have to IPI the remote CPU if the base is idle and the in trigger_dyntick_cpu()
639 * on the way to idle then it can't set base->is_idle as we hold in trigger_dyntick_cpu()
642 if (base->is_idle) { in trigger_dyntick_cpu()
643 WARN_ON_ONCE(!(timer->flags & TIMER_PINNED || in trigger_dyntick_cpu()
644 tick_nohz_full_cpu(base->cpu))); in trigger_dyntick_cpu()
645 wake_up_nohz_cpu(base->cpu); in trigger_dyntick_cpu()
658 hlist_add_head(&timer->entry, base->vectors + idx); in enqueue_timer()
659 __set_bit(idx, base->pending_map); in enqueue_timer()
667 * (bucket_expiry) instead of timer->expires. in enqueue_timer()
669 if (time_before(bucket_expiry, base->next_expiry)) { in enqueue_timer()
674 WRITE_ONCE(base->next_expiry, bucket_expiry); in enqueue_timer()
675 base->timers_pending = true; in enqueue_timer()
676 base->next_expiry_recalc = false; in enqueue_timer()
686 idx = calc_wheel_index(timer->expires, base->clk, &bucket_expiry); in internal_add_timer()
702 .offset = offsetof(container, hintfn) - \
719 if (timer_hints[i].function == timer->function) { in timer_debug_hint()
726 return timer->function; in timer_debug_hint()
733 return (timer->entry.pprev == NULL && in timer_is_static_object()
734 timer->entry.next == TIMER_ENTRY_STATIC); in timer_is_static_object()
739 * - an active object is initialized
763 * - an active object is activated
764 * - an unknown non-static object is activated
785 * - an active object is freed
803 * - an untracked/uninit-ed object is found
898 timer->entry.pprev = NULL; in do_init_timer()
899 timer->function = func; in do_init_timer()
902 timer->flags = flags | raw_smp_processor_id(); in do_init_timer()
903 lockdep_init_map(&timer->lockdep_map, name, key, 0); in do_init_timer()
907 * init_timer_key - initialize a timer
929 struct hlist_node *entry = &timer->entry; in detach_timer()
935 entry->pprev = NULL; in detach_timer()
936 entry->next = LIST_POISON2; in detach_timer()
947 if (hlist_is_singular_node(&timer->entry, base->vectors + idx)) { in detach_if_pending()
948 __clear_bit(idx, base->pending_map); in detach_if_pending()
949 base->next_expiry_recalc = true; in detach_if_pending()
998 * @basej is past base->clk otherwise we might rewind base->clk. in __forward_timer_base()
1000 if (time_before_eq(basej, base->clk)) in __forward_timer_base()
1007 if (time_after(base->next_expiry, basej)) { in __forward_timer_base()
1008 base->clk = basej; in __forward_timer_base()
1010 if (WARN_ON_ONCE(time_before(base->next_expiry, base->clk))) in __forward_timer_base()
1012 base->clk = base->next_expiry; in __forward_timer_base()
1028 * be found in the base->vectors array.
1035 __acquires(timer->base->lock) in lock_timer_base()
1043 * might re-read @tf between the check for TIMER_MIGRATING in lock_timer_base()
1046 tf = READ_ONCE(timer->flags); in lock_timer_base()
1050 raw_spin_lock_irqsave(&base->lock, *flags); in lock_timer_base()
1051 if (timer->flags == tf) in lock_timer_base()
1053 raw_spin_unlock_irqrestore(&base->lock, *flags); in lock_timer_base()
1074 * This is a common optimization triggered by the networking code - if in __mod_timer()
1075 * the timer is re-modified to have the same timeout or ends up in the in __mod_timer()
1084 long diff = timer->expires - expires; in __mod_timer()
1103 if (!timer->function) in __mod_timer()
1109 time_before_eq(timer->expires, expires)) { in __mod_timer()
1114 clk = base->clk; in __mod_timer()
1124 timer->expires = expires; in __mod_timer()
1125 else if (time_after(timer->expires, expires)) in __mod_timer()
1126 timer->expires = expires; in __mod_timer()
1137 if (!timer->function) in __mod_timer()
1147 new_base = get_timer_this_cpu_base(timer->flags); in __mod_timer()
1157 if (likely(base->running_timer != timer)) { in __mod_timer()
1159 timer->flags |= TIMER_MIGRATING; in __mod_timer()
1161 raw_spin_unlock(&base->lock); in __mod_timer()
1163 raw_spin_lock(&base->lock); in __mod_timer()
1164 WRITE_ONCE(timer->flags, in __mod_timer()
1165 (timer->flags & ~TIMER_BASEMASK) | base->cpu); in __mod_timer()
1172 timer->expires = expires; in __mod_timer()
1179 if (idx != UINT_MAX && clk == base->clk) in __mod_timer()
1185 raw_spin_unlock_irqrestore(&base->lock, flags); in __mod_timer()
1191 * mod_timer_pending - Modify a pending timer's timeout
1193 * @expires: New absolute timeout in jiffies
1198 * If @timer->function == NULL then the start operation is silently
1202 * * %0 - The timer was inactive and not modified or was in
1204 * * %1 - The timer was active and requeued to expire at @expires
1213 * mod_timer - Modify a timer's timeout
1215 * @expires: New absolute timeout in jiffies
1219 * del_timer(timer); timer->expires = expires; add_timer(timer);
1226 * same timer, then mod_timer() is the only safe way to modify the timeout,
1229 * If @timer->function == NULL then the start operation is silently
1233 * * %0 - The timer was inactive and started or was in shutdown
1235 * * %1 - The timer was active and requeued to expire at @expires or
1246 * timer_reduce - Modify a timer's timeout if it would reduce the timeout
1248 * @expires: New absolute timeout in jiffies
1254 * If @timer->function == NULL then the start operation is silently
1258 * * %0 - The timer was inactive and started or was in shutdown
1260 * * %1 - The timer was active and requeued to expire at @expires or
1272 * add_timer - Start a timer
1275 * Start @timer to expire at @timer->expires in the future. @timer->expires
1277 * timer->function(timer) will be invoked from soft interrupt context.
1279 * The @timer->expires and @timer->function fields must be set prior
1282 * If @timer->function == NULL then the start operation is silently
1285 * If @timer->expires is already in the past @timer will be queued to
1295 __mod_timer(timer, timer->expires, MOD_TIMER_NOTPENDING); in add_timer()
1300 * add_timer_local() - Start a timer on the local CPU
1311 timer->flags |= TIMER_PINNED; in add_timer_local()
1312 __mod_timer(timer, timer->expires, MOD_TIMER_NOTPENDING); in add_timer_local()
1317 * add_timer_global() - Start a timer without TIMER_PINNED flag set
1328 timer->flags &= ~TIMER_PINNED; in add_timer_global()
1329 __mod_timer(timer, timer->expires, MOD_TIMER_NOTPENDING); in add_timer_global()
1334 * add_timer_on - Start a timer on a particular CPU
1356 timer->flags |= TIMER_PINNED; in add_timer_on()
1358 new_base = get_timer_cpu_base(timer->flags, cpu); in add_timer_on()
1370 if (!timer->function) in add_timer_on()
1374 timer->flags |= TIMER_MIGRATING; in add_timer_on()
1376 raw_spin_unlock(&base->lock); in add_timer_on()
1378 raw_spin_lock(&base->lock); in add_timer_on()
1379 WRITE_ONCE(timer->flags, in add_timer_on()
1380 (timer->flags & ~TIMER_BASEMASK) | cpu); in add_timer_on()
1387 raw_spin_unlock_irqrestore(&base->lock, flags); in add_timer_on()
1392 * __timer_delete - Internal function: Deactivate a timer
1397 * If @shutdown is true then @timer->function is set to NULL under the
1403 * * %0 - The timer was not pending
1404 * * %1 - The timer was pending and deactivated
1420 * timer->function == NULL in the expiry code. in __timer_delete()
1422 * If timer->function is currently executed, then this makes sure in __timer_delete()
1429 timer->function = NULL; in __timer_delete()
1430 raw_spin_unlock_irqrestore(&base->lock, flags); in __timer_delete()
1437 * timer_delete - Deactivate a timer
1447 * * %0 - The timer was not pending
1448 * * %1 - The timer was pending and deactivated
1457 * timer_shutdown - Deactivate a timer and prevent rearming
1468 * * %0 - The timer was not pending
1469 * * %1 - The timer was pending
1478 * __try_to_del_timer_sync - Internal function: Try to deactivate a timer
1483 * If @shutdown is true then @timer->function is set to NULL under the
1493 * * %0 - The timer was not pending
1494 * * %1 - The timer was pending and deactivated
1495 * * %-1 - The timer callback function is running on a different CPU
1501 int ret = -1; in __try_to_del_timer_sync()
1507 if (base->running_timer != timer) in __try_to_del_timer_sync()
1510 timer->function = NULL; in __try_to_del_timer_sync()
1512 raw_spin_unlock_irqrestore(&base->lock, flags); in __try_to_del_timer_sync()
1518 * try_to_del_timer_sync - Try to deactivate a timer
1529 * * %0 - The timer was not pending
1530 * * %1 - The timer was pending and deactivated
1531 * * %-1 - The timer callback function is running on a different CPU
1542 spin_lock_init(&base->expiry_lock); in timer_base_init_expiry_lock()
1547 spin_lock(&base->expiry_lock); in timer_base_lock_expiry()
1552 spin_unlock(&base->expiry_lock); in timer_base_unlock_expiry()
1558 * If there is a waiter for base->expiry_lock, then it was waiting for the
1563 __releases(&base->lock) __releases(&base->expiry_lock) in timer_sync_wait_running()
1564 __acquires(&base->expiry_lock) __acquires(&base->lock) in timer_sync_wait_running()
1566 if (atomic_read(&base->timer_waiters)) { in timer_sync_wait_running()
1567 raw_spin_unlock_irq(&base->lock); in timer_sync_wait_running()
1568 spin_unlock(&base->expiry_lock); in timer_sync_wait_running()
1569 spin_lock(&base->expiry_lock); in timer_sync_wait_running()
1570 raw_spin_lock_irq(&base->lock); in timer_sync_wait_running()
1588 tf = READ_ONCE(timer->flags); in del_timer_wait_running()
1600 atomic_inc(&base->timer_waiters); in del_timer_wait_running()
1601 spin_lock_bh(&base->expiry_lock); in del_timer_wait_running()
1602 atomic_dec(&base->timer_waiters); in del_timer_wait_running()
1603 spin_unlock_bh(&base->expiry_lock); in del_timer_wait_running()
1615 * __timer_delete_sync - Internal function: Deactivate a timer and wait
1618 * @shutdown: If true, @timer->function will be set to NULL under the
1625 * If @shutdown is set then @timer->function is set to NULL under timer
1633 * * %0 - The timer was not pending
1634 * * %1 - The timer was pending and deactivated
1648 lock_map_acquire(&timer->lockdep_map); in __timer_delete_sync()
1649 lock_map_release(&timer->lockdep_map); in __timer_delete_sync()
1656 WARN_ON(in_hardirq() && !(timer->flags & TIMER_IRQSAFE)); in __timer_delete_sync()
1662 if (IS_ENABLED(CONFIG_PREEMPT_RT) && !(timer->flags & TIMER_IRQSAFE)) in __timer_delete_sync()
1678 * timer_delete_sync - Deactivate a timer and wait for the handler to finish.
1693 * ---- ----
1696 * base->running_timer = mytimer;
1701 * while (base->running_timer == mytimer);
1716 * * %0 - The timer was not pending
1717 * * %1 - The timer was pending and deactivated
1726 * timer_shutdown_sync - Shutdown a timer and prevent rearming
1730 * - @timer is not queued
1731 * - The callback function of @timer is not running
1732 * - @timer cannot be enqueued again. Any attempt to rearm
1743 * code has conditionals like 'if (mything->in_shutdown)' to prevent that
1749 * timer_shutdown_sync(&mything->timer);
1750 * workqueue_destroy(&mything->workqueue);
1758 * * %0 - The timer was not pending
1759 * * %1 - The timer was pending
1779 * timer->lockdep_map, make a copy and use that here. in call_timer_fn()
1783 lockdep_copy_map(&lockdep_map, &timer->lockdep_map); in call_timer_fn()
1799 WARN_ONCE(1, "timer: %pS preempt leak: %08x -> %08x\n", in call_timer_fn()
1814 * This value is required only for tracing. base->clk was in expire_timers()
1816 * is related to the old base->clk value. in expire_timers()
1818 unsigned long baseclk = base->clk - 1; in expire_timers()
1824 timer = hlist_entry(head->first, struct timer_list, entry); in expire_timers()
1826 base->running_timer = timer; in expire_timers()
1829 fn = timer->function; in expire_timers()
1833 base->running_timer = NULL; in expire_timers()
1837 if (timer->flags & TIMER_IRQSAFE) { in expire_timers()
1838 raw_spin_unlock(&base->lock); in expire_timers()
1840 raw_spin_lock(&base->lock); in expire_timers()
1841 base->running_timer = NULL; in expire_timers()
1843 raw_spin_unlock_irq(&base->lock); in expire_timers()
1845 raw_spin_lock_irq(&base->lock); in expire_timers()
1846 base->running_timer = NULL; in expire_timers()
1855 unsigned long clk = base->clk = base->next_expiry; in collect_expired_timers()
1863 if (__test_and_clear_bit(idx, base->pending_map)) { in collect_expired_timers()
1864 vec = base->vectors + idx; in collect_expired_timers()
1888 pos = find_next_bit(base->pending_map, end, start); in next_pending_bucket()
1890 return pos - start; in next_pending_bucket()
1892 pos = find_next_bit(base->pending_map, start, offset); in next_pending_bucket()
1893 return pos < start ? pos + LVL_SIZE - start : -1; in next_pending_bucket()
1898 * hold base->lock.
1900 * Store next expiry time in base->next_expiry.
1907 next = base->clk + NEXT_TIMER_MAX_DELTA; in timer_recalc_next_expiry()
1908 clk = base->clk; in timer_recalc_next_expiry()
1924 if (pos <= ((LVL_CLK_DIV - lvl_clk) & LVL_CLK_MASK)) in timer_recalc_next_expiry()
1931 * next expiring bucket in that level. base->clk is the next in timer_recalc_next_expiry()
1968 WRITE_ONCE(base->next_expiry, next); in timer_recalc_next_expiry()
1969 base->next_expiry_recalc = false; in timer_recalc_next_expiry()
1970 base->timers_pending = !(next == base->clk + NEXT_TIMER_MAX_DELTA); in timer_recalc_next_expiry()
2010 if (base->next_expiry_recalc) in next_timer_interrupt()
2021 if (!base->timers_pending) in next_timer_interrupt()
2022 WRITE_ONCE(base->next_expiry, basej + NEXT_TIMER_MAX_DELTA); in next_timer_interrupt()
2024 return base->next_expiry; in next_timer_interrupt()
2051 tevt->local = basem + (u64)(nextevt - basej) * TICK_NSEC; in fetch_next_timer_interrupt()
2059 * updating tevt->global with the already missed first global in fetch_next_timer_interrupt()
2062 * * The local callers will ignore the tevt->global anyway, when in fetch_next_timer_interrupt()
2066 tevt->global = tevt->local; in fetch_next_timer_interrupt()
2076 if (!local_first && base_global->timers_pending) in fetch_next_timer_interrupt()
2077 tevt->global = basem + (u64)(nextevt_global - basej) * TICK_NSEC; in fetch_next_timer_interrupt()
2079 if (base_local->timers_pending) in fetch_next_timer_interrupt()
2080 tevt->local = basem + (u64)(nextevt_local - basej) * TICK_NSEC; in fetch_next_timer_interrupt()
2087 * fetch_next_timer_interrupt_remote() - Store next timers into @tevt
2108 tevt->local = tevt->global = KTIME_MAX; in fetch_next_timer_interrupt_remote()
2113 lockdep_assert_held(&base_local->lock); in fetch_next_timer_interrupt_remote()
2114 lockdep_assert_held(&base_global->lock); in fetch_next_timer_interrupt_remote()
2120 * timer_unlock_remote_bases - unlock timer bases of cpu
2126 __releases(timer_bases[BASE_LOCAL]->lock) in timer_unlock_remote_bases()
2127 __releases(timer_bases[BASE_GLOBAL]->lock) in timer_unlock_remote_bases()
2134 raw_spin_unlock(&base_global->lock); in timer_unlock_remote_bases()
2135 raw_spin_unlock(&base_local->lock); in timer_unlock_remote_bases()
2139 * timer_lock_remote_bases - lock timer bases of cpu
2145 __acquires(timer_bases[BASE_LOCAL]->lock) in timer_lock_remote_bases()
2146 __acquires(timer_bases[BASE_GLOBAL]->lock) in timer_lock_remote_bases()
2155 raw_spin_lock(&base_local->lock); in timer_lock_remote_bases()
2156 raw_spin_lock_nested(&base_global->lock, SINGLE_DEPTH_NESTING); in timer_lock_remote_bases()
2160 * timer_base_is_idle() - Return whether timer base is set idle
2172 * timer_expire_remote() - expire global timers of cpu
2191 next_tmigr = tmigr_cpu_new_timer(tevt->global); in timer_use_tmigr()
2193 next_tmigr = tmigr_cpu_deactivate(tevt->global); in timer_use_tmigr()
2195 next_tmigr = tmigr_quick_check(tevt->global); in timer_use_tmigr()
2198 * If the CPU is the last going idle in timer migration hierarchy, make in timer_use_tmigr()
2202 if (next_tmigr < tevt->local) { in timer_use_tmigr()
2209 tmp = div_u64(next_tmigr - basem, TICK_NSEC); in timer_use_tmigr()
2212 tevt->local = next_tmigr; in timer_use_tmigr()
2221 * Make sure first event is written into tevt->local to not miss a in timer_use_tmigr()
2224 tevt->local = min_t(u64, tevt->local, tevt->global); in timer_use_tmigr()
2229 bool *idle) in __get_next_timer_interrupt() argument
2241 if (idle) in __get_next_timer_interrupt()
2242 *idle = true; in __get_next_timer_interrupt()
2249 raw_spin_lock(&base_local->lock); in __get_next_timer_interrupt()
2250 raw_spin_lock_nested(&base_global->lock, SINGLE_DEPTH_NESTING); in __get_next_timer_interrupt()
2259 * true, when the timer base is idle. in __get_next_timer_interrupt()
2262 * and whether timer base is idle or not. @nextevt will be updated when in __get_next_timer_interrupt()
2268 timer_use_tmigr(basej, basem, &nextevt, idle, in __get_next_timer_interrupt()
2269 base_local->is_idle, &tevt); in __get_next_timer_interrupt()
2279 * Set base->is_idle only when caller is timer_base_try_to_set_idle() in __get_next_timer_interrupt()
2281 if (idle) { in __get_next_timer_interrupt()
2283 * Bases are idle if the next event is more than a tick in __get_next_timer_interrupt()
2288 * If the base is marked idle then any timer add operation must in __get_next_timer_interrupt()
2290 * idle logic is only maintained for the BASE_LOCAL and in __get_next_timer_interrupt()
2294 if (!base_local->is_idle && time_after(nextevt, basej + 1)) { in __get_next_timer_interrupt()
2295 base_local->is_idle = true; in __get_next_timer_interrupt()
2298 * in nohz_full mode need a self-IPI to kick reprogramming in __get_next_timer_interrupt()
2301 if (tick_nohz_full_cpu(base_local->cpu)) in __get_next_timer_interrupt()
2302 base_global->is_idle = true; in __get_next_timer_interrupt()
2303 trace_timer_base_idle(true, base_local->cpu); in __get_next_timer_interrupt()
2305 *idle = base_local->is_idle; in __get_next_timer_interrupt()
2308 * When timer base is not set idle, undo the effect of in __get_next_timer_interrupt()
2309 * tmigr_cpu_deactivate() to prevent inconsistent states - active in __get_next_timer_interrupt()
2312 * When timer base was already marked idle, nothing will be in __get_next_timer_interrupt()
2315 if (!base_local->is_idle && idle_is_possible) in __get_next_timer_interrupt()
2319 raw_spin_unlock(&base_global->lock); in __get_next_timer_interrupt()
2320 raw_spin_unlock(&base_local->lock); in __get_next_timer_interrupt()
2326 * get_next_timer_interrupt() - return the time (clock mono) of the next timer
2333 * it was the last CPU of timer migration hierarchy going idle, first global
2342 * timer_base_try_to_set_idle() - Try to set the idle state of the timer bases
2345 * @idle: pointer to store the value of timer_base->is_idle on return;
2346 * *idle contains the information whether tick was already stopped
2352 u64 timer_base_try_to_set_idle(unsigned long basej, u64 basem, bool *idle) in timer_base_try_to_set_idle() argument
2354 if (*idle) in timer_base_try_to_set_idle()
2357 return __get_next_timer_interrupt(basej, basem, idle); in timer_base_try_to_set_idle()
2361 * timer_clear_idle - Clear the idle state of the timer base
2371 * for the cost of taking the lock in the exit from idle in timer_clear_idle()
2379 /* Activate without holding the timer_base->lock */ in timer_clear_idle()
2385 * __run_timers - run all expired timers (if any) on this CPU.
2393 lockdep_assert_held(&base->lock); in __run_timers()
2395 if (base->running_timer) in __run_timers()
2398 while (time_after_eq(jiffies, base->clk) && in __run_timers()
2399 time_after_eq(jiffies, base->next_expiry)) { in __run_timers()
2408 WARN_ON_ONCE(!levels && !base->next_expiry_recalc in __run_timers()
2409 && base->timers_pending); in __run_timers()
2411 * While executing timers, base->clk is set 1 offset ahead of in __run_timers()
2414 base->clk++; in __run_timers()
2417 while (levels--) in __run_timers()
2425 if (time_before(jiffies, READ_ONCE(base->next_expiry))) in __run_timer_base()
2429 raw_spin_lock_irq(&base->lock); in __run_timer_base()
2431 raw_spin_unlock_irq(&base->lock); in __run_timer_base()
2443 * This function runs timers and the timer-tq in bottom half context.
2458 * Called by the local, per-CPU timer interrupt on SMP.
2488 * was idle before. When the CPU wasn't idle but the update in run_local_timers()
2489 * is missed, then the timer would expire one jiffy late - in run_local_timers()
2500 if (time_after_eq(jiffies, READ_ONCE(base->next_expiry)) || in run_local_timers()
2533 int cpu = new_base->cpu; in migrate_timer_list()
2536 timer = hlist_entry(head->first, struct timer_list, entry); in migrate_timer_list()
2538 timer->flags = (timer->flags & ~TIMER_BASEMASK) | cpu; in migrate_timer_list()
2550 base->clk = jiffies; in timers_prepare_cpu()
2551 base->next_expiry = base->clk + NEXT_TIMER_MAX_DELTA; in timers_prepare_cpu()
2552 base->next_expiry_recalc = false; in timers_prepare_cpu()
2553 base->timers_pending = false; in timers_prepare_cpu()
2554 base->is_idle = false; in timers_prepare_cpu()
2572 raw_spin_lock_irq(&new_base->lock); in timers_dead_cpu()
2573 raw_spin_lock_nested(&old_base->lock, SINGLE_DEPTH_NESTING); in timers_dead_cpu()
2581 WARN_ON_ONCE(old_base->running_timer); in timers_dead_cpu()
2582 old_base->running_timer = NULL; in timers_dead_cpu()
2585 migrate_timer_list(new_base, old_base->vectors + i); in timers_dead_cpu()
2587 raw_spin_unlock(&old_base->lock); in timers_dead_cpu()
2588 raw_spin_unlock_irq(&new_base->lock); in timers_dead_cpu()
2603 base->cpu = cpu; in init_timer_cpu()
2604 raw_spin_lock_init(&base->lock); in init_timer_cpu()
2605 base->clk = jiffies; in init_timer_cpu()
2606 base->next_expiry = base->clk + NEXT_TIMER_MAX_DELTA; in init_timer_cpu()