LCOV - code coverage report
Current view: top level - kernel/time - hrtimer.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 77 372 20.7 %
Date: 2023-04-06 08:38:28 Functions: 9 39 23.1 %

          Line data    Source code
       1             : // SPDX-License-Identifier: GPL-2.0
       2             : /*
       3             :  *  Copyright(C) 2005-2006, Thomas Gleixner <tglx@linutronix.de>
       4             :  *  Copyright(C) 2005-2007, Red Hat, Inc., Ingo Molnar
       5             :  *  Copyright(C) 2006-2007  Timesys Corp., Thomas Gleixner
       6             :  *
       7             :  *  High-resolution kernel timers
       8             :  *
       9             :  *  In contrast to the low-resolution timeout API, aka timer wheel,
      10             :  *  hrtimers provide finer resolution and accuracy depending on system
      11             :  *  configuration and capabilities.
      12             :  *
      13             :  *  Started by: Thomas Gleixner and Ingo Molnar
      14             :  *
      15             :  *  Credits:
      16             :  *      Based on the original timer wheel code
      17             :  *
      18             :  *      Help, testing, suggestions, bugfixes, improvements were
      19             :  *      provided by:
      20             :  *
      21             :  *      George Anzinger, Andrew Morton, Steven Rostedt, Roman Zippel
      22             :  *      et. al.
      23             :  */
      24             : 
      25             : #include <linux/cpu.h>
      26             : #include <linux/export.h>
      27             : #include <linux/percpu.h>
      28             : #include <linux/hrtimer.h>
      29             : #include <linux/notifier.h>
      30             : #include <linux/syscalls.h>
      31             : #include <linux/interrupt.h>
      32             : #include <linux/tick.h>
      33             : #include <linux/err.h>
      34             : #include <linux/debugobjects.h>
      35             : #include <linux/sched/signal.h>
      36             : #include <linux/sched/sysctl.h>
      37             : #include <linux/sched/rt.h>
      38             : #include <linux/sched/deadline.h>
      39             : #include <linux/sched/nohz.h>
      40             : #include <linux/sched/debug.h>
      41             : #include <linux/timer.h>
      42             : #include <linux/freezer.h>
      43             : #include <linux/compat.h>
      44             : 
      45             : #include <linux/uaccess.h>
      46             : 
      47             : #include <trace/events/timer.h>
      48             : 
      49             : #include "tick-internal.h"
      50             : 
      51             : /*
      52             :  * Masks for selecting the soft and hard context timers from
      53             :  * cpu_base->active
      54             :  */
      55             : #define MASK_SHIFT              (HRTIMER_BASE_MONOTONIC_SOFT)
      56             : #define HRTIMER_ACTIVE_HARD     ((1U << MASK_SHIFT) - 1)
      57             : #define HRTIMER_ACTIVE_SOFT     (HRTIMER_ACTIVE_HARD << MASK_SHIFT)
      58             : #define HRTIMER_ACTIVE_ALL      (HRTIMER_ACTIVE_SOFT | HRTIMER_ACTIVE_HARD)
      59             : 
      60             : /*
      61             :  * The timer bases:
      62             :  *
      63             :  * There are more clockids than hrtimer bases. Thus, we index
      64             :  * into the timer bases by the hrtimer_base_type enum. When trying
      65             :  * to reach a base using a clockid, hrtimer_clockid_to_base()
      66             :  * is used to convert from clockid to the proper hrtimer_base_type.
      67             :  */
      68             : DEFINE_PER_CPU(struct hrtimer_cpu_base, hrtimer_bases) =
      69             : {
      70             :         .lock = __RAW_SPIN_LOCK_UNLOCKED(hrtimer_bases.lock),
      71             :         .clock_base =
      72             :         {
      73             :                 {
      74             :                         .index = HRTIMER_BASE_MONOTONIC,
      75             :                         .clockid = CLOCK_MONOTONIC,
      76             :                         .get_time = &ktime_get,
      77             :                 },
      78             :                 {
      79             :                         .index = HRTIMER_BASE_REALTIME,
      80             :                         .clockid = CLOCK_REALTIME,
      81             :                         .get_time = &ktime_get_real,
      82             :                 },
      83             :                 {
      84             :                         .index = HRTIMER_BASE_BOOTTIME,
      85             :                         .clockid = CLOCK_BOOTTIME,
      86             :                         .get_time = &ktime_get_boottime,
      87             :                 },
      88             :                 {
      89             :                         .index = HRTIMER_BASE_TAI,
      90             :                         .clockid = CLOCK_TAI,
      91             :                         .get_time = &ktime_get_clocktai,
      92             :                 },
      93             :                 {
      94             :                         .index = HRTIMER_BASE_MONOTONIC_SOFT,
      95             :                         .clockid = CLOCK_MONOTONIC,
      96             :                         .get_time = &ktime_get,
      97             :                 },
      98             :                 {
      99             :                         .index = HRTIMER_BASE_REALTIME_SOFT,
     100             :                         .clockid = CLOCK_REALTIME,
     101             :                         .get_time = &ktime_get_real,
     102             :                 },
     103             :                 {
     104             :                         .index = HRTIMER_BASE_BOOTTIME_SOFT,
     105             :                         .clockid = CLOCK_BOOTTIME,
     106             :                         .get_time = &ktime_get_boottime,
     107             :                 },
     108             :                 {
     109             :                         .index = HRTIMER_BASE_TAI_SOFT,
     110             :                         .clockid = CLOCK_TAI,
     111             :                         .get_time = &ktime_get_clocktai,
     112             :                 },
     113             :         }
     114             : };
     115             : 
     116             : static const int hrtimer_clock_to_base_table[MAX_CLOCKS] = {
     117             :         /* Make sure we catch unsupported clockids */
     118             :         [0 ... MAX_CLOCKS - 1]  = HRTIMER_MAX_CLOCK_BASES,
     119             : 
     120             :         [CLOCK_REALTIME]        = HRTIMER_BASE_REALTIME,
     121             :         [CLOCK_MONOTONIC]       = HRTIMER_BASE_MONOTONIC,
     122             :         [CLOCK_BOOTTIME]        = HRTIMER_BASE_BOOTTIME,
     123             :         [CLOCK_TAI]             = HRTIMER_BASE_TAI,
     124             : };
     125             : 
     126             : /*
     127             :  * Functions and macros which are different for UP/SMP systems are kept in a
     128             :  * single place
     129             :  */
     130             : #ifdef CONFIG_SMP
     131             : 
     132             : /*
     133             :  * We require the migration_base for lock_hrtimer_base()/switch_hrtimer_base()
     134             :  * such that hrtimer_callback_running() can unconditionally dereference
     135             :  * timer->base->cpu_base
     136             :  */
     137             : static struct hrtimer_cpu_base migration_cpu_base = {
     138             :         .clock_base = { {
     139             :                 .cpu_base = &migration_cpu_base,
     140             :                 .seq      = SEQCNT_RAW_SPINLOCK_ZERO(migration_cpu_base.seq,
     141             :                                                      &migration_cpu_base.lock),
     142             :         }, },
     143             : };
     144             : 
     145             : #define migration_base  migration_cpu_base.clock_base[0]
     146             : 
     147             : static inline bool is_migration_base(struct hrtimer_clock_base *base)
     148             : {
     149             :         return base == &migration_base;
     150             : }
     151             : 
     152             : /*
     153             :  * We are using hashed locking: holding per_cpu(hrtimer_bases)[n].lock
     154             :  * means that all timers which are tied to this base via timer->base are
     155             :  * locked, and the base itself is locked too.
     156             :  *
     157             :  * So __run_timers/migrate_timers can safely modify all timers which could
     158             :  * be found on the lists/queues.
     159             :  *
     160             :  * When the timer's base is locked, and the timer removed from list, it is
     161             :  * possible to set timer->base = &migration_base and drop the lock: the timer
     162             :  * remains locked.
     163             :  */
     164             : static
     165             : struct hrtimer_clock_base *lock_hrtimer_base(const struct hrtimer *timer,
     166             :                                              unsigned long *flags)
     167             : {
     168             :         struct hrtimer_clock_base *base;
     169             : 
     170             :         for (;;) {
     171             :                 base = READ_ONCE(timer->base);
     172             :                 if (likely(base != &migration_base)) {
     173             :                         raw_spin_lock_irqsave(&base->cpu_base->lock, *flags);
     174             :                         if (likely(base == timer->base))
     175             :                                 return base;
     176             :                         /* The timer has migrated to another CPU: */
     177             :                         raw_spin_unlock_irqrestore(&base->cpu_base->lock, *flags);
     178             :                 }
     179             :                 cpu_relax();
     180             :         }
     181             : }
     182             : 
     183             : /*
     184             :  * We do not migrate the timer when it is expiring before the next
     185             :  * event on the target cpu. When high resolution is enabled, we cannot
     186             :  * reprogram the target cpu hardware and we would cause it to fire
     187             :  * late. To keep it simple, we handle the high resolution enabled and
     188             :  * disabled case similar.
     189             :  *
     190             :  * Called with cpu_base->lock of target cpu held.
     191             :  */
     192             : static int
     193             : hrtimer_check_target(struct hrtimer *timer, struct hrtimer_clock_base *new_base)
     194             : {
     195             :         ktime_t expires;
     196             : 
     197             :         expires = ktime_sub(hrtimer_get_expires(timer), new_base->offset);
     198             :         return expires < new_base->cpu_base->expires_next;
     199             : }
     200             : 
     201             : static inline
     202             : struct hrtimer_cpu_base *get_target_base(struct hrtimer_cpu_base *base,
     203             :                                          int pinned)
     204             : {
     205             : #if defined(CONFIG_SMP) && defined(CONFIG_NO_HZ_COMMON)
     206             :         if (static_branch_likely(&timers_migration_enabled) && !pinned)
     207             :                 return &per_cpu(hrtimer_bases, get_nohz_timer_target());
     208             : #endif
     209             :         return base;
     210             : }
     211             : 
     212             : /*
     213             :  * We switch the timer base to a power-optimized selected CPU target,
     214             :  * if:
     215             :  *      - NO_HZ_COMMON is enabled
     216             :  *      - timer migration is enabled
     217             :  *      - the timer callback is not running
     218             :  *      - the timer is not the first expiring timer on the new target
     219             :  *
     220             :  * If one of the above requirements is not fulfilled we move the timer
     221             :  * to the current CPU or leave it on the previously assigned CPU if
     222             :  * the timer callback is currently running.
     223             :  */
     224             : static inline struct hrtimer_clock_base *
     225             : switch_hrtimer_base(struct hrtimer *timer, struct hrtimer_clock_base *base,
     226             :                     int pinned)
     227             : {
     228             :         struct hrtimer_cpu_base *new_cpu_base, *this_cpu_base;
     229             :         struct hrtimer_clock_base *new_base;
     230             :         int basenum = base->index;
     231             : 
     232             :         this_cpu_base = this_cpu_ptr(&hrtimer_bases);
     233             :         new_cpu_base = get_target_base(this_cpu_base, pinned);
     234             : again:
     235             :         new_base = &new_cpu_base->clock_base[basenum];
     236             : 
     237             :         if (base != new_base) {
     238             :                 /*
     239             :                  * We are trying to move timer to new_base.
     240             :                  * However we can't change timer's base while it is running,
     241             :                  * so we keep it on the same CPU. No hassle vs. reprogramming
     242             :                  * the event source in the high resolution case. The softirq
     243             :                  * code will take care of this when the timer function has
     244             :                  * completed. There is no conflict as we hold the lock until
     245             :                  * the timer is enqueued.
     246             :                  */
     247             :                 if (unlikely(hrtimer_callback_running(timer)))
     248             :                         return base;
     249             : 
     250             :                 /* See the comment in lock_hrtimer_base() */
     251             :                 WRITE_ONCE(timer->base, &migration_base);
     252             :                 raw_spin_unlock(&base->cpu_base->lock);
     253             :                 raw_spin_lock(&new_base->cpu_base->lock);
     254             : 
     255             :                 if (new_cpu_base != this_cpu_base &&
     256             :                     hrtimer_check_target(timer, new_base)) {
     257             :                         raw_spin_unlock(&new_base->cpu_base->lock);
     258             :                         raw_spin_lock(&base->cpu_base->lock);
     259             :                         new_cpu_base = this_cpu_base;
     260             :                         WRITE_ONCE(timer->base, base);
     261             :                         goto again;
     262             :                 }
     263             :                 WRITE_ONCE(timer->base, new_base);
     264             :         } else {
     265             :                 if (new_cpu_base != this_cpu_base &&
     266             :                     hrtimer_check_target(timer, new_base)) {
     267             :                         new_cpu_base = this_cpu_base;
     268             :                         goto again;
     269             :                 }
     270             :         }
     271             :         return new_base;
     272             : }
     273             : 
     274             : #else /* CONFIG_SMP */
     275             : 
     276             : static inline bool is_migration_base(struct hrtimer_clock_base *base)
     277             : {
     278             :         return false;
     279             : }
     280             : 
     281             : static inline struct hrtimer_clock_base *
     282             : lock_hrtimer_base(const struct hrtimer *timer, unsigned long *flags)
     283             : {
     284           0 :         struct hrtimer_clock_base *base = timer->base;
     285             : 
     286           0 :         raw_spin_lock_irqsave(&base->cpu_base->lock, *flags);
     287             : 
     288             :         return base;
     289             : }
     290             : 
     291             : # define switch_hrtimer_base(t, b, p)   (b)
     292             : 
     293             : #endif  /* !CONFIG_SMP */
     294             : 
     295             : /*
     296             :  * Functions for the union type storage format of ktime_t which are
     297             :  * too large for inlining:
     298             :  */
     299             : #if BITS_PER_LONG < 64
     300             : /*
     301             :  * Divide a ktime value by a nanosecond value
     302             :  */
     303             : s64 __ktime_divns(const ktime_t kt, s64 div)
     304             : {
     305             :         int sft = 0;
     306             :         s64 dclc;
     307             :         u64 tmp;
     308             : 
     309             :         dclc = ktime_to_ns(kt);
     310             :         tmp = dclc < 0 ? -dclc : dclc;
     311             : 
     312             :         /* Make sure the divisor is less than 2^32: */
     313             :         while (div >> 32) {
     314             :                 sft++;
     315             :                 div >>= 1;
     316             :         }
     317             :         tmp >>= sft;
     318             :         do_div(tmp, (u32) div);
     319             :         return dclc < 0 ? -tmp : tmp;
     320             : }
     321             : EXPORT_SYMBOL_GPL(__ktime_divns);
     322             : #endif /* BITS_PER_LONG >= 64 */
     323             : 
     324             : /*
     325             :  * Add two ktime values and do a safety check for overflow:
     326             :  */
     327           0 : ktime_t ktime_add_safe(const ktime_t lhs, const ktime_t rhs)
     328             : {
     329           0 :         ktime_t res = ktime_add_unsafe(lhs, rhs);
     330             : 
     331             :         /*
     332             :          * We use KTIME_SEC_MAX here, the maximum timeout which we can
     333             :          * return to user space in a timespec:
     334             :          */
     335           0 :         if (res < 0 || res < lhs || res < rhs)
     336           0 :                 res = ktime_set(KTIME_SEC_MAX, 0);
     337             : 
     338           0 :         return res;
     339             : }
     340             : 
     341             : EXPORT_SYMBOL_GPL(ktime_add_safe);
     342             : 
     343             : #ifdef CONFIG_DEBUG_OBJECTS_TIMERS
     344             : 
     345             : static const struct debug_obj_descr hrtimer_debug_descr;
     346             : 
     347             : static void *hrtimer_debug_hint(void *addr)
     348             : {
     349             :         return ((struct hrtimer *) addr)->function;
     350             : }
     351             : 
     352             : /*
     353             :  * fixup_init is called when:
     354             :  * - an active object is initialized
     355             :  */
     356             : static bool hrtimer_fixup_init(void *addr, enum debug_obj_state state)
     357             : {
     358             :         struct hrtimer *timer = addr;
     359             : 
     360             :         switch (state) {
     361             :         case ODEBUG_STATE_ACTIVE:
     362             :                 hrtimer_cancel(timer);
     363             :                 debug_object_init(timer, &hrtimer_debug_descr);
     364             :                 return true;
     365             :         default:
     366             :                 return false;
     367             :         }
     368             : }
     369             : 
     370             : /*
     371             :  * fixup_activate is called when:
     372             :  * - an active object is activated
     373             :  * - an unknown non-static object is activated
     374             :  */
     375             : static bool hrtimer_fixup_activate(void *addr, enum debug_obj_state state)
     376             : {
     377             :         switch (state) {
     378             :         case ODEBUG_STATE_ACTIVE:
     379             :                 WARN_ON(1);
     380             :                 fallthrough;
     381             :         default:
     382             :                 return false;
     383             :         }
     384             : }
     385             : 
     386             : /*
     387             :  * fixup_free is called when:
     388             :  * - an active object is freed
     389             :  */
     390             : static bool hrtimer_fixup_free(void *addr, enum debug_obj_state state)
     391             : {
     392             :         struct hrtimer *timer = addr;
     393             : 
     394             :         switch (state) {
     395             :         case ODEBUG_STATE_ACTIVE:
     396             :                 hrtimer_cancel(timer);
     397             :                 debug_object_free(timer, &hrtimer_debug_descr);
     398             :                 return true;
     399             :         default:
     400             :                 return false;
     401             :         }
     402             : }
     403             : 
     404             : static const struct debug_obj_descr hrtimer_debug_descr = {
     405             :         .name           = "hrtimer",
     406             :         .debug_hint     = hrtimer_debug_hint,
     407             :         .fixup_init     = hrtimer_fixup_init,
     408             :         .fixup_activate = hrtimer_fixup_activate,
     409             :         .fixup_free     = hrtimer_fixup_free,
     410             : };
     411             : 
     412             : static inline void debug_hrtimer_init(struct hrtimer *timer)
     413             : {
     414             :         debug_object_init(timer, &hrtimer_debug_descr);
     415             : }
     416             : 
     417             : static inline void debug_hrtimer_activate(struct hrtimer *timer,
     418             :                                           enum hrtimer_mode mode)
     419             : {
     420             :         debug_object_activate(timer, &hrtimer_debug_descr);
     421             : }
     422             : 
     423             : static inline void debug_hrtimer_deactivate(struct hrtimer *timer)
     424             : {
     425             :         debug_object_deactivate(timer, &hrtimer_debug_descr);
     426             : }
     427             : 
     428             : static void __hrtimer_init(struct hrtimer *timer, clockid_t clock_id,
     429             :                            enum hrtimer_mode mode);
     430             : 
     431             : void hrtimer_init_on_stack(struct hrtimer *timer, clockid_t clock_id,
     432             :                            enum hrtimer_mode mode)
     433             : {
     434             :         debug_object_init_on_stack(timer, &hrtimer_debug_descr);
     435             :         __hrtimer_init(timer, clock_id, mode);
     436             : }
     437             : EXPORT_SYMBOL_GPL(hrtimer_init_on_stack);
     438             : 
     439             : static void __hrtimer_init_sleeper(struct hrtimer_sleeper *sl,
     440             :                                    clockid_t clock_id, enum hrtimer_mode mode);
     441             : 
     442             : void hrtimer_init_sleeper_on_stack(struct hrtimer_sleeper *sl,
     443             :                                    clockid_t clock_id, enum hrtimer_mode mode)
     444             : {
     445             :         debug_object_init_on_stack(&sl->timer, &hrtimer_debug_descr);
     446             :         __hrtimer_init_sleeper(sl, clock_id, mode);
     447             : }
     448             : EXPORT_SYMBOL_GPL(hrtimer_init_sleeper_on_stack);
     449             : 
     450             : void destroy_hrtimer_on_stack(struct hrtimer *timer)
     451             : {
     452             :         debug_object_free(timer, &hrtimer_debug_descr);
     453             : }
     454             : EXPORT_SYMBOL_GPL(destroy_hrtimer_on_stack);
     455             : 
     456             : #else
     457             : 
     458             : static inline void debug_hrtimer_init(struct hrtimer *timer) { }
     459             : static inline void debug_hrtimer_activate(struct hrtimer *timer,
     460             :                                           enum hrtimer_mode mode) { }
     461             : static inline void debug_hrtimer_deactivate(struct hrtimer *timer) { }
     462             : #endif
     463             : 
     464             : static inline void
     465             : debug_init(struct hrtimer *timer, clockid_t clockid,
     466             :            enum hrtimer_mode mode)
     467             : {
     468        1617 :         debug_hrtimer_init(timer);
     469        1617 :         trace_hrtimer_init(timer, clockid, mode);
     470             : }
     471             : 
     472             : static inline void debug_activate(struct hrtimer *timer,
     473             :                                   enum hrtimer_mode mode)
     474             : {
     475           0 :         debug_hrtimer_activate(timer, mode);
     476           0 :         trace_hrtimer_start(timer, mode);
     477             : }
     478             : 
     479             : static inline void debug_deactivate(struct hrtimer *timer)
     480             : {
     481           0 :         debug_hrtimer_deactivate(timer);
     482           0 :         trace_hrtimer_cancel(timer);
     483             : }
     484             : 
     485             : static struct hrtimer_clock_base *
     486             : __next_base(struct hrtimer_cpu_base *cpu_base, unsigned int *active)
     487             : {
     488             :         unsigned int idx;
     489             : 
     490        2751 :         if (!*active)
     491             :                 return NULL;
     492             : 
     493           0 :         idx = __ffs(*active);
     494           0 :         *active &= ~(1U << idx);
     495             : 
     496           0 :         return &cpu_base->clock_base[idx];
     497             : }
     498             : 
     499             : #define for_each_active_base(base, cpu_base, active)    \
     500             :         while ((base = __next_base((cpu_base), &(active))))
     501             : 
     502           0 : static ktime_t __hrtimer_next_event_base(struct hrtimer_cpu_base *cpu_base,
     503             :                                          const struct hrtimer *exclude,
     504             :                                          unsigned int active,
     505             :                                          ktime_t expires_next)
     506             : {
     507             :         struct hrtimer_clock_base *base;
     508             :         ktime_t expires;
     509             : 
     510           0 :         for_each_active_base(base, cpu_base, active) {
     511             :                 struct timerqueue_node *next;
     512             :                 struct hrtimer *timer;
     513             : 
     514           0 :                 next = timerqueue_getnext(&base->active);
     515           0 :                 timer = container_of(next, struct hrtimer, node);
     516           0 :                 if (timer == exclude) {
     517             :                         /* Get to the next timer in the queue. */
     518           0 :                         next = timerqueue_iterate_next(next);
     519           0 :                         if (!next)
     520           0 :                                 continue;
     521             : 
     522             :                         timer = container_of(next, struct hrtimer, node);
     523             :                 }
     524           0 :                 expires = ktime_sub(hrtimer_get_expires(timer), base->offset);
     525           0 :                 if (expires < expires_next) {
     526           0 :                         expires_next = expires;
     527             : 
     528             :                         /* Skip cpu_base update if a timer is being excluded. */
     529           0 :                         if (exclude)
     530           0 :                                 continue;
     531             : 
     532           0 :                         if (timer->is_soft)
     533           0 :                                 cpu_base->softirq_next_timer = timer;
     534             :                         else
     535           0 :                                 cpu_base->next_timer = timer;
     536             :                 }
     537             :         }
     538             :         /*
     539             :          * clock_was_set() might have changed base->offset of any of
     540             :          * the clock bases so the result might be negative. Fix it up
     541             :          * to prevent a false positive in clockevents_program_event().
     542             :          */
     543           0 :         if (expires_next < 0)
     544           0 :                 expires_next = 0;
     545           0 :         return expires_next;
     546             : }
     547             : 
     548             : /*
     549             :  * Recomputes cpu_base::*next_timer and returns the earliest expires_next
     550             :  * but does not set cpu_base::*expires_next, that is done by
     551             :  * hrtimer[_force]_reprogram and hrtimer_interrupt only. When updating
     552             :  * cpu_base::*expires_next right away, reprogramming logic would no longer
     553             :  * work.
     554             :  *
     555             :  * When a softirq is pending, we can ignore the HRTIMER_ACTIVE_SOFT bases,
     556             :  * those timers will get run whenever the softirq gets handled, at the end of
     557             :  * hrtimer_run_softirq(), hrtimer_update_softirq_timer() will re-add these bases.
     558             :  *
     559             :  * Therefore softirq values are those from the HRTIMER_ACTIVE_SOFT clock bases.
     560             :  * The !softirq values are the minima across HRTIMER_ACTIVE_ALL, unless an actual
     561             :  * softirq is pending, in which case they're the minima of HRTIMER_ACTIVE_HARD.
     562             :  *
     563             :  * @active_mask must be one of:
     564             :  *  - HRTIMER_ACTIVE_ALL,
     565             :  *  - HRTIMER_ACTIVE_SOFT, or
     566             :  *  - HRTIMER_ACTIVE_HARD.
     567             :  */
     568             : static ktime_t
     569           0 : __hrtimer_get_next_event(struct hrtimer_cpu_base *cpu_base, unsigned int active_mask)
     570             : {
     571             :         unsigned int active;
     572           0 :         struct hrtimer *next_timer = NULL;
     573           0 :         ktime_t expires_next = KTIME_MAX;
     574             : 
     575           0 :         if (!cpu_base->softirq_activated && (active_mask & HRTIMER_ACTIVE_SOFT)) {
     576           0 :                 active = cpu_base->active_bases & HRTIMER_ACTIVE_SOFT;
     577           0 :                 cpu_base->softirq_next_timer = NULL;
     578           0 :                 expires_next = __hrtimer_next_event_base(cpu_base, NULL,
     579             :                                                          active, KTIME_MAX);
     580             : 
     581           0 :                 next_timer = cpu_base->softirq_next_timer;
     582             :         }
     583             : 
     584           0 :         if (active_mask & HRTIMER_ACTIVE_HARD) {
     585           0 :                 active = cpu_base->active_bases & HRTIMER_ACTIVE_HARD;
     586           0 :                 cpu_base->next_timer = next_timer;
     587           0 :                 expires_next = __hrtimer_next_event_base(cpu_base, NULL, active,
     588             :                                                          expires_next);
     589             :         }
     590             : 
     591           0 :         return expires_next;
     592             : }
     593             : 
     594           0 : static ktime_t hrtimer_update_next_event(struct hrtimer_cpu_base *cpu_base)
     595             : {
     596           0 :         ktime_t expires_next, soft = KTIME_MAX;
     597             : 
     598             :         /*
     599             :          * If the soft interrupt has already been activated, ignore the
     600             :          * soft bases. They will be handled in the already raised soft
     601             :          * interrupt.
     602             :          */
     603           0 :         if (!cpu_base->softirq_activated) {
     604           0 :                 soft = __hrtimer_get_next_event(cpu_base, HRTIMER_ACTIVE_SOFT);
     605             :                 /*
     606             :                  * Update the soft expiry time. clock_settime() might have
     607             :                  * affected it.
     608             :                  */
     609           0 :                 cpu_base->softirq_expires_next = soft;
     610             :         }
     611             : 
     612           0 :         expires_next = __hrtimer_get_next_event(cpu_base, HRTIMER_ACTIVE_HARD);
     613             :         /*
     614             :          * If a softirq timer is expiring first, update cpu_base->next_timer
     615             :          * and program the hardware with the soft expiry time.
     616             :          */
     617           0 :         if (expires_next > soft) {
     618           0 :                 cpu_base->next_timer = cpu_base->softirq_next_timer;
     619           0 :                 expires_next = soft;
     620             :         }
     621             : 
     622           0 :         return expires_next;
     623             : }
     624             : 
     625             : static inline ktime_t hrtimer_update_base(struct hrtimer_cpu_base *base)
     626             : {
     627        2751 :         ktime_t *offs_real = &base->clock_base[HRTIMER_BASE_REALTIME].offset;
     628        2751 :         ktime_t *offs_boot = &base->clock_base[HRTIMER_BASE_BOOTTIME].offset;
     629        2751 :         ktime_t *offs_tai = &base->clock_base[HRTIMER_BASE_TAI].offset;
     630             : 
     631        2751 :         ktime_t now = ktime_get_update_offsets_now(&base->clock_was_set_seq,
     632             :                                             offs_real, offs_boot, offs_tai);
     633             : 
     634        2751 :         base->clock_base[HRTIMER_BASE_REALTIME_SOFT].offset = *offs_real;
     635        2751 :         base->clock_base[HRTIMER_BASE_BOOTTIME_SOFT].offset = *offs_boot;
     636        2751 :         base->clock_base[HRTIMER_BASE_TAI_SOFT].offset = *offs_tai;
     637             : 
     638             :         return now;
     639             : }
     640             : 
     641             : /*
     642             :  * Is the high resolution mode active ?
     643             :  */
     644             : static inline int __hrtimer_hres_active(struct hrtimer_cpu_base *cpu_base)
     645             : {
     646             :         return IS_ENABLED(CONFIG_HIGH_RES_TIMERS) ?
     647             :                 cpu_base->hres_active : 0;
     648             : }
     649             : 
     650             : static inline int hrtimer_hres_active(void)
     651             : {
     652             :         return __hrtimer_hres_active(this_cpu_ptr(&hrtimer_bases));
     653             : }
     654             : 
     655             : static void __hrtimer_reprogram(struct hrtimer_cpu_base *cpu_base,
     656             :                                 struct hrtimer *next_timer,
     657             :                                 ktime_t expires_next)
     658             : {
     659           0 :         cpu_base->expires_next = expires_next;
     660             : 
     661             :         /*
     662             :          * If hres is not active, hardware does not have to be
     663             :          * reprogrammed yet.
     664             :          *
     665             :          * If a hang was detected in the last timer interrupt then we
     666             :          * leave the hang delay active in the hardware. We want the
     667             :          * system to make progress. That also prevents the following
     668             :          * scenario:
     669             :          * T1 expires 50ms from now
     670             :          * T2 expires 5s from now
     671             :          *
     672             :          * T1 is removed, so this code is called and would reprogram
     673             :          * the hardware to 5s from now. Any hrtimer_start after that
     674             :          * will not reprogram the hardware due to hang_detected being
     675             :          * set. So we'd effectively block all timers until the T2 event
     676             :          * fires.
     677             :          */
     678           0 :         if (!__hrtimer_hres_active(cpu_base) || cpu_base->hang_detected)
     679             :                 return;
     680             : 
     681             :         tick_program_event(expires_next, 1);
     682             : }
     683             : 
     684             : /*
     685             :  * Reprogram the event source with checking both queues for the
     686             :  * next event
     687             :  * Called with interrupts disabled and base->lock held
     688             :  */
     689             : static void
     690             : hrtimer_force_reprogram(struct hrtimer_cpu_base *cpu_base, int skip_equal)
     691             : {
     692             :         ktime_t expires_next;
     693             : 
     694           0 :         expires_next = hrtimer_update_next_event(cpu_base);
     695             : 
     696           0 :         if (skip_equal && expires_next == cpu_base->expires_next)
     697             :                 return;
     698             : 
     699           0 :         __hrtimer_reprogram(cpu_base, cpu_base->next_timer, expires_next);
     700             : }
     701             : 
     702             : /* High resolution timer related functions */
     703             : #ifdef CONFIG_HIGH_RES_TIMERS
     704             : 
     705             : /*
     706             :  * High resolution timer enabled ?
     707             :  */
     708             : static bool hrtimer_hres_enabled __read_mostly  = true;
     709             : unsigned int hrtimer_resolution __read_mostly = LOW_RES_NSEC;
     710             : EXPORT_SYMBOL_GPL(hrtimer_resolution);
     711             : 
     712             : /*
     713             :  * Enable / Disable high resolution mode
     714             :  */
     715             : static int __init setup_hrtimer_hres(char *str)
     716             : {
     717             :         return (kstrtobool(str, &hrtimer_hres_enabled) == 0);
     718             : }
     719             : 
     720             : __setup("highres=", setup_hrtimer_hres);
     721             : 
     722             : /*
     723             :  * hrtimer_high_res_enabled - query, if the highres mode is enabled
     724             :  */
     725             : static inline int hrtimer_is_hres_enabled(void)
     726             : {
     727             :         return hrtimer_hres_enabled;
     728             : }
     729             : 
     730             : static void retrigger_next_event(void *arg);
     731             : 
     732             : /*
     733             :  * Switch to high resolution mode
     734             :  */
     735             : static void hrtimer_switch_to_hres(void)
     736             : {
     737             :         struct hrtimer_cpu_base *base = this_cpu_ptr(&hrtimer_bases);
     738             : 
     739             :         if (tick_init_highres()) {
     740             :                 pr_warn("Could not switch to high resolution mode on CPU %u\n",
     741             :                         base->cpu);
     742             :                 return;
     743             :         }
     744             :         base->hres_active = 1;
     745             :         hrtimer_resolution = HIGH_RES_NSEC;
     746             : 
     747             :         tick_setup_sched_timer();
     748             :         /* "Retrigger" the interrupt to get things going */
     749             :         retrigger_next_event(NULL);
     750             : }
     751             : 
     752             : #else
     753             : 
     754             : static inline int hrtimer_is_hres_enabled(void) { return 0; }
     755             : static inline void hrtimer_switch_to_hres(void) { }
     756             : 
     757             : #endif /* CONFIG_HIGH_RES_TIMERS */
     758             : /*
     759             :  * Retrigger next event is called after clock was set with interrupts
     760             :  * disabled through an SMP function call or directly from low level
     761             :  * resume code.
     762             :  *
     763             :  * This is only invoked when:
     764             :  *      - CONFIG_HIGH_RES_TIMERS is enabled.
     765             :  *      - CONFIG_NOHZ_COMMON is enabled
     766             :  *
     767             :  * For the other cases this function is empty and because the call sites
     768             :  * are optimized out it vanishes as well, i.e. no need for lots of
     769             :  * #ifdeffery.
     770             :  */
     771             : static void retrigger_next_event(void *arg)
     772             : {
     773           0 :         struct hrtimer_cpu_base *base = this_cpu_ptr(&hrtimer_bases);
     774             : 
     775             :         /*
     776             :          * When high resolution mode or nohz is active, then the offsets of
     777             :          * CLOCK_REALTIME/TAI/BOOTTIME have to be updated. Otherwise the
     778             :          * next tick will take care of that.
     779             :          *
     780             :          * If high resolution mode is active then the next expiring timer
     781             :          * must be reevaluated and the clock event device reprogrammed if
     782             :          * necessary.
     783             :          *
     784             :          * In the NOHZ case the update of the offset and the reevaluation
     785             :          * of the next expiring timer is enough. The return from the SMP
     786             :          * function call will take care of the reprogramming in case the
     787             :          * CPU was in a NOHZ idle sleep.
     788             :          */
     789           0 :         if (!__hrtimer_hres_active(base) && !tick_nohz_active)
     790             :                 return;
     791             : 
     792             :         raw_spin_lock(&base->lock);
     793             :         hrtimer_update_base(base);
     794             :         if (__hrtimer_hres_active(base))
     795             :                 hrtimer_force_reprogram(base, 0);
     796             :         else
     797             :                 hrtimer_update_next_event(base);
     798             :         raw_spin_unlock(&base->lock);
     799             : }
     800             : 
     801             : /*
     802             :  * When a timer is enqueued and expires earlier than the already enqueued
     803             :  * timers, we have to check, whether it expires earlier than the timer for
     804             :  * which the clock event device was armed.
     805             :  *
     806             :  * Called with interrupts disabled and base->cpu_base.lock held
     807             :  */
     808           0 : static void hrtimer_reprogram(struct hrtimer *timer, bool reprogram)
     809             : {
     810           0 :         struct hrtimer_cpu_base *cpu_base = this_cpu_ptr(&hrtimer_bases);
     811           0 :         struct hrtimer_clock_base *base = timer->base;
     812           0 :         ktime_t expires = ktime_sub(hrtimer_get_expires(timer), base->offset);
     813             : 
     814           0 :         WARN_ON_ONCE(hrtimer_get_expires_tv64(timer) < 0);
     815             : 
     816             :         /*
     817             :          * CLOCK_REALTIME timer might be requested with an absolute
     818             :          * expiry time which is less than base->offset. Set it to 0.
     819             :          */
     820           0 :         if (expires < 0)
     821           0 :                 expires = 0;
     822             : 
     823           0 :         if (timer->is_soft) {
     824             :                 /*
     825             :                  * soft hrtimer could be started on a remote CPU. In this
     826             :                  * case softirq_expires_next needs to be updated on the
     827             :                  * remote CPU. The soft hrtimer will not expire before the
     828             :                  * first hard hrtimer on the remote CPU -
     829             :                  * hrtimer_check_target() prevents this case.
     830             :                  */
     831           0 :                 struct hrtimer_cpu_base *timer_cpu_base = base->cpu_base;
     832             : 
     833           0 :                 if (timer_cpu_base->softirq_activated)
     834             :                         return;
     835             : 
     836           0 :                 if (!ktime_before(expires, timer_cpu_base->softirq_expires_next))
     837             :                         return;
     838             : 
     839           0 :                 timer_cpu_base->softirq_next_timer = timer;
     840           0 :                 timer_cpu_base->softirq_expires_next = expires;
     841             : 
     842           0 :                 if (!ktime_before(expires, timer_cpu_base->expires_next) ||
     843             :                     !reprogram)
     844             :                         return;
     845             :         }
     846             : 
     847             :         /*
     848             :          * If the timer is not on the current cpu, we cannot reprogram
     849             :          * the other cpus clock event device.
     850             :          */
     851           0 :         if (base->cpu_base != cpu_base)
     852             :                 return;
     853             : 
     854           0 :         if (expires >= cpu_base->expires_next)
     855             :                 return;
     856             : 
     857             :         /*
     858             :          * If the hrtimer interrupt is running, then it will reevaluate the
     859             :          * clock bases and reprogram the clock event device.
     860             :          */
     861           0 :         if (cpu_base->in_hrtirq)
     862             :                 return;
     863             : 
     864           0 :         cpu_base->next_timer = timer;
     865             : 
     866           0 :         __hrtimer_reprogram(cpu_base, timer, expires);
     867             : }
     868             : 
     869             : static bool update_needs_ipi(struct hrtimer_cpu_base *cpu_base,
     870             :                              unsigned int active)
     871             : {
     872             :         struct hrtimer_clock_base *base;
     873             :         unsigned int seq;
     874             :         ktime_t expires;
     875             : 
     876             :         /*
     877             :          * Update the base offsets unconditionally so the following
     878             :          * checks whether the SMP function call is required works.
     879             :          *
     880             :          * The update is safe even when the remote CPU is in the hrtimer
     881             :          * interrupt or the hrtimer soft interrupt and expiring affected
     882             :          * bases. Either it will see the update before handling a base or
     883             :          * it will see it when it finishes the processing and reevaluates
     884             :          * the next expiring timer.
     885             :          */
     886             :         seq = cpu_base->clock_was_set_seq;
     887             :         hrtimer_update_base(cpu_base);
     888             : 
     889             :         /*
     890             :          * If the sequence did not change over the update then the
     891             :          * remote CPU already handled it.
     892             :          */
     893             :         if (seq == cpu_base->clock_was_set_seq)
     894             :                 return false;
     895             : 
     896             :         /*
     897             :          * If the remote CPU is currently handling an hrtimer interrupt, it
     898             :          * will reevaluate the first expiring timer of all clock bases
     899             :          * before reprogramming. Nothing to do here.
     900             :          */
     901             :         if (cpu_base->in_hrtirq)
     902             :                 return false;
     903             : 
     904             :         /*
     905             :          * Walk the affected clock bases and check whether the first expiring
     906             :          * timer in a clock base is moving ahead of the first expiring timer of
     907             :          * @cpu_base. If so, the IPI must be invoked because per CPU clock
     908             :          * event devices cannot be remotely reprogrammed.
     909             :          */
     910             :         active &= cpu_base->active_bases;
     911             : 
     912             :         for_each_active_base(base, cpu_base, active) {
     913             :                 struct timerqueue_node *next;
     914             : 
     915             :                 next = timerqueue_getnext(&base->active);
     916             :                 expires = ktime_sub(next->expires, base->offset);
     917             :                 if (expires < cpu_base->expires_next)
     918             :                         return true;
     919             : 
     920             :                 /* Extra check for softirq clock bases */
     921             :                 if (base->clockid < HRTIMER_BASE_MONOTONIC_SOFT)
     922             :                         continue;
     923             :                 if (cpu_base->softirq_activated)
     924             :                         continue;
     925             :                 if (expires < cpu_base->softirq_expires_next)
     926             :                         return true;
     927             :         }
     928             :         return false;
     929             : }
     930             : 
     931             : /*
     932             :  * Clock was set. This might affect CLOCK_REALTIME, CLOCK_TAI and
     933             :  * CLOCK_BOOTTIME (for late sleep time injection).
     934             :  *
     935             :  * This requires to update the offsets for these clocks
     936             :  * vs. CLOCK_MONOTONIC. When high resolution timers are enabled, then this
     937             :  * also requires to eventually reprogram the per CPU clock event devices
     938             :  * when the change moves an affected timer ahead of the first expiring
     939             :  * timer on that CPU. Obviously remote per CPU clock event devices cannot
     940             :  * be reprogrammed. The other reason why an IPI has to be sent is when the
     941             :  * system is in !HIGH_RES and NOHZ mode. The NOHZ mode updates the offsets
     942             :  * in the tick, which obviously might be stopped, so this has to bring out
     943             :  * the remote CPU which might sleep in idle to get this sorted.
     944             :  */
     945           0 : void clock_was_set(unsigned int bases)
     946             : {
     947           0 :         struct hrtimer_cpu_base *cpu_base = raw_cpu_ptr(&hrtimer_bases);
     948             :         cpumask_var_t mask;
     949             :         int cpu;
     950             : 
     951           0 :         if (!__hrtimer_hres_active(cpu_base) && !tick_nohz_active)
     952             :                 goto out_timerfd;
     953             : 
     954             :         if (!zalloc_cpumask_var(&mask, GFP_KERNEL)) {
     955             :                 on_each_cpu(retrigger_next_event, NULL, 1);
     956             :                 goto out_timerfd;
     957             :         }
     958             : 
     959             :         /* Avoid interrupting CPUs if possible */
     960             :         cpus_read_lock();
     961             :         for_each_online_cpu(cpu) {
     962             :                 unsigned long flags;
     963             : 
     964             :                 cpu_base = &per_cpu(hrtimer_bases, cpu);
     965             :                 raw_spin_lock_irqsave(&cpu_base->lock, flags);
     966             : 
     967             :                 if (update_needs_ipi(cpu_base, bases))
     968             :                         cpumask_set_cpu(cpu, mask);
     969             : 
     970             :                 raw_spin_unlock_irqrestore(&cpu_base->lock, flags);
     971             :         }
     972             : 
     973             :         preempt_disable();
     974             :         smp_call_function_many(mask, retrigger_next_event, NULL, 1);
     975             :         preempt_enable();
     976             :         cpus_read_unlock();
     977             :         free_cpumask_var(mask);
     978             : 
     979             : out_timerfd:
     980           0 :         timerfd_clock_was_set();
     981           0 : }
     982             : 
     983           0 : static void clock_was_set_work(struct work_struct *work)
     984             : {
     985           0 :         clock_was_set(CLOCK_SET_WALL);
     986           0 : }
     987             : 
     988             : static DECLARE_WORK(hrtimer_work, clock_was_set_work);
     989             : 
     990             : /*
     991             :  * Called from timekeeping code to reprogram the hrtimer interrupt device
     992             :  * on all cpus and to notify timerfd.
     993             :  */
     994           0 : void clock_was_set_delayed(void)
     995             : {
     996           0 :         schedule_work(&hrtimer_work);
     997           0 : }
     998             : 
     999             : /*
    1000             :  * Called during resume either directly from via timekeeping_resume()
    1001             :  * or in the case of s2idle from tick_unfreeze() to ensure that the
    1002             :  * hrtimers are up to date.
    1003             :  */
    1004           0 : void hrtimers_resume_local(void)
    1005             : {
    1006             :         lockdep_assert_irqs_disabled();
    1007             :         /* Retrigger on the local CPU */
    1008           0 :         retrigger_next_event(NULL);
    1009           0 : }
    1010             : 
    1011             : /*
    1012             :  * Counterpart to lock_hrtimer_base above:
    1013             :  */
    1014             : static inline
    1015             : void unlock_hrtimer_base(const struct hrtimer *timer, unsigned long *flags)
    1016             : {
    1017           0 :         raw_spin_unlock_irqrestore(&timer->base->cpu_base->lock, *flags);
    1018             : }
    1019             : 
    1020             : /**
    1021             :  * hrtimer_forward - forward the timer expiry
    1022             :  * @timer:      hrtimer to forward
    1023             :  * @now:        forward past this time
    1024             :  * @interval:   the interval to forward
    1025             :  *
    1026             :  * Forward the timer expiry so it will expire in the future.
    1027             :  * Returns the number of overruns.
    1028             :  *
    1029             :  * Can be safely called from the callback function of @timer. If
    1030             :  * called from other contexts @timer must neither be enqueued nor
    1031             :  * running the callback and the caller needs to take care of
    1032             :  * serialization.
    1033             :  *
    1034             :  * Note: This only updates the timer expiry value and does not requeue
    1035             :  * the timer.
    1036             :  */
    1037           0 : u64 hrtimer_forward(struct hrtimer *timer, ktime_t now, ktime_t interval)
    1038             : {
    1039           0 :         u64 orun = 1;
    1040             :         ktime_t delta;
    1041             : 
    1042           0 :         delta = ktime_sub(now, hrtimer_get_expires(timer));
    1043             : 
    1044           0 :         if (delta < 0)
    1045             :                 return 0;
    1046             : 
    1047           0 :         if (WARN_ON(timer->state & HRTIMER_STATE_ENQUEUED))
    1048             :                 return 0;
    1049             : 
    1050           0 :         if (interval < hrtimer_resolution)
    1051           0 :                 interval = hrtimer_resolution;
    1052             : 
    1053           0 :         if (unlikely(delta >= interval)) {
    1054           0 :                 s64 incr = ktime_to_ns(interval);
    1055             : 
    1056           0 :                 orun = ktime_divns(delta, incr);
    1057           0 :                 hrtimer_add_expires_ns(timer, incr * orun);
    1058           0 :                 if (hrtimer_get_expires_tv64(timer) > now)
    1059             :                         return orun;
    1060             :                 /*
    1061             :                  * This (and the ktime_add() below) is the
    1062             :                  * correction for exact:
    1063             :                  */
    1064           0 :                 orun++;
    1065             :         }
    1066           0 :         hrtimer_add_expires(timer, interval);
    1067             : 
    1068           0 :         return orun;
    1069             : }
    1070             : EXPORT_SYMBOL_GPL(hrtimer_forward);
    1071             : 
    1072             : /*
    1073             :  * enqueue_hrtimer - internal function to (re)start a timer
    1074             :  *
    1075             :  * The timer is inserted in expiry order. Insertion into the
    1076             :  * red black tree is O(log(n)). Must hold the base lock.
    1077             :  *
    1078             :  * Returns 1 when the new timer is the leftmost timer in the tree.
    1079             :  */
    1080             : static int enqueue_hrtimer(struct hrtimer *timer,
    1081             :                            struct hrtimer_clock_base *base,
    1082             :                            enum hrtimer_mode mode)
    1083             : {
    1084           0 :         debug_activate(timer, mode);
    1085             : 
    1086           0 :         base->cpu_base->active_bases |= 1 << base->index;
    1087             : 
    1088             :         /* Pairs with the lockless read in hrtimer_is_queued() */
    1089           0 :         WRITE_ONCE(timer->state, HRTIMER_STATE_ENQUEUED);
    1090             : 
    1091           0 :         return timerqueue_add(&base->active, &timer->node);
    1092             : }
    1093             : 
    1094             : /*
    1095             :  * __remove_hrtimer - internal function to remove a timer
    1096             :  *
    1097             :  * Caller must hold the base lock.
    1098             :  *
    1099             :  * High resolution timer mode reprograms the clock event device when the
    1100             :  * timer is the one which expires next. The caller can disable this by setting
    1101             :  * reprogram to zero. This is useful, when the context does a reprogramming
    1102             :  * anyway (e.g. timer interrupt)
    1103             :  */
    1104           0 : static void __remove_hrtimer(struct hrtimer *timer,
    1105             :                              struct hrtimer_clock_base *base,
    1106             :                              u8 newstate, int reprogram)
    1107             : {
    1108           0 :         struct hrtimer_cpu_base *cpu_base = base->cpu_base;
    1109           0 :         u8 state = timer->state;
    1110             : 
    1111             :         /* Pairs with the lockless read in hrtimer_is_queued() */
    1112           0 :         WRITE_ONCE(timer->state, newstate);
    1113           0 :         if (!(state & HRTIMER_STATE_ENQUEUED))
    1114             :                 return;
    1115             : 
    1116           0 :         if (!timerqueue_del(&base->active, &timer->node))
    1117           0 :                 cpu_base->active_bases &= ~(1 << base->index);
    1118             : 
    1119             :         /*
    1120             :          * Note: If reprogram is false we do not update
    1121             :          * cpu_base->next_timer. This happens when we remove the first
    1122             :          * timer on a remote cpu. No harm as we never dereference
    1123             :          * cpu_base->next_timer. So the worst thing what can happen is
    1124             :          * an superfluous call to hrtimer_force_reprogram() on the
    1125             :          * remote cpu later on if the same timer gets enqueued again.
    1126             :          */
    1127           0 :         if (reprogram && timer == cpu_base->next_timer)
    1128             :                 hrtimer_force_reprogram(cpu_base, 1);
    1129             : }
    1130             : 
    1131             : /*
    1132             :  * remove hrtimer, called with base lock held
    1133             :  */
    1134             : static inline int
    1135             : remove_hrtimer(struct hrtimer *timer, struct hrtimer_clock_base *base,
    1136             :                bool restart, bool keep_local)
    1137             : {
    1138           0 :         u8 state = timer->state;
    1139             : 
    1140           0 :         if (state & HRTIMER_STATE_ENQUEUED) {
    1141             :                 bool reprogram;
    1142             : 
    1143             :                 /*
    1144             :                  * Remove the timer and force reprogramming when high
    1145             :                  * resolution mode is active and the timer is on the current
    1146             :                  * CPU. If we remove a timer on another CPU, reprogramming is
    1147             :                  * skipped. The interrupt event on this CPU is fired and
    1148             :                  * reprogramming happens in the interrupt handler. This is a
    1149             :                  * rare case and less expensive than a smp call.
    1150             :                  */
    1151           0 :                 debug_deactivate(timer);
    1152           0 :                 reprogram = base->cpu_base == this_cpu_ptr(&hrtimer_bases);
    1153             : 
    1154             :                 /*
    1155             :                  * If the timer is not restarted then reprogramming is
    1156             :                  * required if the timer is local. If it is local and about
    1157             :                  * to be restarted, avoid programming it twice (on removal
    1158             :                  * and a moment later when it's requeued).
    1159             :                  */
    1160             :                 if (!restart)
    1161             :                         state = HRTIMER_STATE_INACTIVE;
    1162             :                 else
    1163           0 :                         reprogram &= !keep_local;
    1164             : 
    1165           0 :                 __remove_hrtimer(timer, base, state, reprogram);
    1166             :                 return 1;
    1167             :         }
    1168             :         return 0;
    1169             : }
    1170             : 
    1171             : static inline ktime_t hrtimer_update_lowres(struct hrtimer *timer, ktime_t tim,
    1172             :                                             const enum hrtimer_mode mode)
    1173             : {
    1174             : #ifdef CONFIG_TIME_LOW_RES
    1175             :         /*
    1176             :          * CONFIG_TIME_LOW_RES indicates that the system has no way to return
    1177             :          * granular time values. For relative timers we add hrtimer_resolution
    1178             :          * (i.e. one jiffie) to prevent short timeouts.
    1179             :          */
    1180             :         timer->is_rel = mode & HRTIMER_MODE_REL;
    1181             :         if (timer->is_rel)
    1182             :                 tim = ktime_add_safe(tim, hrtimer_resolution);
    1183             : #endif
    1184             :         return tim;
    1185             : }
    1186             : 
    1187             : static void
    1188           0 : hrtimer_update_softirq_timer(struct hrtimer_cpu_base *cpu_base, bool reprogram)
    1189             : {
    1190             :         ktime_t expires;
    1191             : 
    1192             :         /*
    1193             :          * Find the next SOFT expiration.
    1194             :          */
    1195           0 :         expires = __hrtimer_get_next_event(cpu_base, HRTIMER_ACTIVE_SOFT);
    1196             : 
    1197             :         /*
    1198             :          * reprogramming needs to be triggered, even if the next soft
    1199             :          * hrtimer expires at the same time than the next hard
    1200             :          * hrtimer. cpu_base->softirq_expires_next needs to be updated!
    1201             :          */
    1202           0 :         if (expires == KTIME_MAX)
    1203             :                 return;
    1204             : 
    1205             :         /*
    1206             :          * cpu_base->*next_timer is recomputed by __hrtimer_get_next_event()
    1207             :          * cpu_base->*expires_next is only set by hrtimer_reprogram()
    1208             :          */
    1209           0 :         hrtimer_reprogram(cpu_base->softirq_next_timer, reprogram);
    1210             : }
    1211             : 
    1212           0 : static int __hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim,
    1213             :                                     u64 delta_ns, const enum hrtimer_mode mode,
    1214             :                                     struct hrtimer_clock_base *base)
    1215             : {
    1216             :         struct hrtimer_clock_base *new_base;
    1217             :         bool force_local, first;
    1218             : 
    1219             :         /*
    1220             :          * If the timer is on the local cpu base and is the first expiring
    1221             :          * timer then this might end up reprogramming the hardware twice
    1222             :          * (on removal and on enqueue). To avoid that by prevent the
    1223             :          * reprogram on removal, keep the timer local to the current CPU
    1224             :          * and enforce reprogramming after it is queued no matter whether
    1225             :          * it is the new first expiring timer again or not.
    1226             :          */
    1227           0 :         force_local = base->cpu_base == this_cpu_ptr(&hrtimer_bases);
    1228           0 :         force_local &= base->cpu_base->next_timer == timer;
    1229             : 
    1230             :         /*
    1231             :          * Remove an active timer from the queue. In case it is not queued
    1232             :          * on the current CPU, make sure that remove_hrtimer() updates the
    1233             :          * remote data correctly.
    1234             :          *
    1235             :          * If it's on the current CPU and the first expiring timer, then
    1236             :          * skip reprogramming, keep the timer local and enforce
    1237             :          * reprogramming later if it was the first expiring timer.  This
    1238             :          * avoids programming the underlying clock event twice (once at
    1239             :          * removal and once after enqueue).
    1240             :          */
    1241           0 :         remove_hrtimer(timer, base, true, force_local);
    1242             : 
    1243           0 :         if (mode & HRTIMER_MODE_REL)
    1244           0 :                 tim = ktime_add_safe(tim, base->get_time());
    1245             : 
    1246           0 :         tim = hrtimer_update_lowres(timer, tim, mode);
    1247             : 
    1248           0 :         hrtimer_set_expires_range_ns(timer, tim, delta_ns);
    1249             : 
    1250             :         /* Switch the timer base, if necessary: */
    1251             :         if (!force_local) {
    1252             :                 new_base = switch_hrtimer_base(timer, base,
    1253             :                                                mode & HRTIMER_MODE_PINNED);
    1254             :         } else {
    1255             :                 new_base = base;
    1256             :         }
    1257             : 
    1258           0 :         first = enqueue_hrtimer(timer, new_base, mode);
    1259           0 :         if (!force_local)
    1260             :                 return first;
    1261             : 
    1262             :         /*
    1263             :          * Timer was forced to stay on the current CPU to avoid
    1264             :          * reprogramming on removal and enqueue. Force reprogram the
    1265             :          * hardware by evaluating the new first expiring timer.
    1266             :          */
    1267           0 :         hrtimer_force_reprogram(new_base->cpu_base, 1);
    1268             :         return 0;
    1269             : }
    1270             : 
    1271             : /**
    1272             :  * hrtimer_start_range_ns - (re)start an hrtimer
    1273             :  * @timer:      the timer to be added
    1274             :  * @tim:        expiry time
    1275             :  * @delta_ns:   "slack" range for the timer
    1276             :  * @mode:       timer mode: absolute (HRTIMER_MODE_ABS) or
    1277             :  *              relative (HRTIMER_MODE_REL), and pinned (HRTIMER_MODE_PINNED);
    1278             :  *              softirq based mode is considered for debug purpose only!
    1279             :  */
    1280           0 : void hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim,
    1281             :                             u64 delta_ns, const enum hrtimer_mode mode)
    1282             : {
    1283             :         struct hrtimer_clock_base *base;
    1284             :         unsigned long flags;
    1285             : 
    1286             :         /*
    1287             :          * Check whether the HRTIMER_MODE_SOFT bit and hrtimer.is_soft
    1288             :          * match on CONFIG_PREEMPT_RT = n. With PREEMPT_RT check the hard
    1289             :          * expiry mode because unmarked timers are moved to softirq expiry.
    1290             :          */
    1291             :         if (!IS_ENABLED(CONFIG_PREEMPT_RT))
    1292           0 :                 WARN_ON_ONCE(!(mode & HRTIMER_MODE_SOFT) ^ !timer->is_soft);
    1293             :         else
    1294             :                 WARN_ON_ONCE(!(mode & HRTIMER_MODE_HARD) ^ !timer->is_hard);
    1295             : 
    1296           0 :         base = lock_hrtimer_base(timer, &flags);
    1297             : 
    1298           0 :         if (__hrtimer_start_range_ns(timer, tim, delta_ns, mode, base))
    1299           0 :                 hrtimer_reprogram(timer, true);
    1300             : 
    1301           0 :         unlock_hrtimer_base(timer, &flags);
    1302           0 : }
    1303             : EXPORT_SYMBOL_GPL(hrtimer_start_range_ns);
    1304             : 
    1305             : /**
    1306             :  * hrtimer_try_to_cancel - try to deactivate a timer
    1307             :  * @timer:      hrtimer to stop
    1308             :  *
    1309             :  * Returns:
    1310             :  *
    1311             :  *  *  0 when the timer was not active
    1312             :  *  *  1 when the timer was active
    1313             :  *  * -1 when the timer is currently executing the callback function and
    1314             :  *    cannot be stopped
    1315             :  */
    1316         333 : int hrtimer_try_to_cancel(struct hrtimer *timer)
    1317             : {
    1318             :         struct hrtimer_clock_base *base;
    1319             :         unsigned long flags;
    1320         333 :         int ret = -1;
    1321             : 
    1322             :         /*
    1323             :          * Check lockless first. If the timer is not active (neither
    1324             :          * enqueued nor running the callback, nothing to do here.  The
    1325             :          * base lock does not serialize against a concurrent enqueue,
    1326             :          * so we can avoid taking it.
    1327             :          */
    1328         333 :         if (!hrtimer_active(timer))
    1329             :                 return 0;
    1330             : 
    1331           0 :         base = lock_hrtimer_base(timer, &flags);
    1332             : 
    1333           0 :         if (!hrtimer_callback_running(timer))
    1334             :                 ret = remove_hrtimer(timer, base, false, false);
    1335             : 
    1336           0 :         unlock_hrtimer_base(timer, &flags);
    1337             : 
    1338           0 :         return ret;
    1339             : 
    1340             : }
    1341             : EXPORT_SYMBOL_GPL(hrtimer_try_to_cancel);
    1342             : 
    1343             : #ifdef CONFIG_PREEMPT_RT
    1344             : static void hrtimer_cpu_base_init_expiry_lock(struct hrtimer_cpu_base *base)
    1345             : {
    1346             :         spin_lock_init(&base->softirq_expiry_lock);
    1347             : }
    1348             : 
    1349             : static void hrtimer_cpu_base_lock_expiry(struct hrtimer_cpu_base *base)
    1350             : {
    1351             :         spin_lock(&base->softirq_expiry_lock);
    1352             : }
    1353             : 
    1354             : static void hrtimer_cpu_base_unlock_expiry(struct hrtimer_cpu_base *base)
    1355             : {
    1356             :         spin_unlock(&base->softirq_expiry_lock);
    1357             : }
    1358             : 
    1359             : /*
    1360             :  * The counterpart to hrtimer_cancel_wait_running().
    1361             :  *
    1362             :  * If there is a waiter for cpu_base->expiry_lock, then it was waiting for
    1363             :  * the timer callback to finish. Drop expiry_lock and reacquire it. That
    1364             :  * allows the waiter to acquire the lock and make progress.
    1365             :  */
    1366             : static void hrtimer_sync_wait_running(struct hrtimer_cpu_base *cpu_base,
    1367             :                                       unsigned long flags)
    1368             : {
    1369             :         if (atomic_read(&cpu_base->timer_waiters)) {
    1370             :                 raw_spin_unlock_irqrestore(&cpu_base->lock, flags);
    1371             :                 spin_unlock(&cpu_base->softirq_expiry_lock);
    1372             :                 spin_lock(&cpu_base->softirq_expiry_lock);
    1373             :                 raw_spin_lock_irq(&cpu_base->lock);
    1374             :         }
    1375             : }
    1376             : 
    1377             : /*
    1378             :  * This function is called on PREEMPT_RT kernels when the fast path
    1379             :  * deletion of a timer failed because the timer callback function was
    1380             :  * running.
    1381             :  *
    1382             :  * This prevents priority inversion: if the soft irq thread is preempted
    1383             :  * in the middle of a timer callback, then calling del_timer_sync() can
    1384             :  * lead to two issues:
    1385             :  *
    1386             :  *  - If the caller is on a remote CPU then it has to spin wait for the timer
    1387             :  *    handler to complete. This can result in unbound priority inversion.
    1388             :  *
    1389             :  *  - If the caller originates from the task which preempted the timer
    1390             :  *    handler on the same CPU, then spin waiting for the timer handler to
    1391             :  *    complete is never going to end.
    1392             :  */
    1393             : void hrtimer_cancel_wait_running(const struct hrtimer *timer)
    1394             : {
    1395             :         /* Lockless read. Prevent the compiler from reloading it below */
    1396             :         struct hrtimer_clock_base *base = READ_ONCE(timer->base);
    1397             : 
    1398             :         /*
    1399             :          * Just relax if the timer expires in hard interrupt context or if
    1400             :          * it is currently on the migration base.
    1401             :          */
    1402             :         if (!timer->is_soft || is_migration_base(base)) {
    1403             :                 cpu_relax();
    1404             :                 return;
    1405             :         }
    1406             : 
    1407             :         /*
    1408             :          * Mark the base as contended and grab the expiry lock, which is
    1409             :          * held by the softirq across the timer callback. Drop the lock
    1410             :          * immediately so the softirq can expire the next timer. In theory
    1411             :          * the timer could already be running again, but that's more than
    1412             :          * unlikely and just causes another wait loop.
    1413             :          */
    1414             :         atomic_inc(&base->cpu_base->timer_waiters);
    1415             :         spin_lock_bh(&base->cpu_base->softirq_expiry_lock);
    1416             :         atomic_dec(&base->cpu_base->timer_waiters);
    1417             :         spin_unlock_bh(&base->cpu_base->softirq_expiry_lock);
    1418             : }
    1419             : #else
    1420             : static inline void
    1421             : hrtimer_cpu_base_init_expiry_lock(struct hrtimer_cpu_base *base) { }
    1422             : static inline void
    1423             : hrtimer_cpu_base_lock_expiry(struct hrtimer_cpu_base *base) { }
    1424             : static inline void
    1425             : hrtimer_cpu_base_unlock_expiry(struct hrtimer_cpu_base *base) { }
    1426             : static inline void hrtimer_sync_wait_running(struct hrtimer_cpu_base *base,
    1427             :                                              unsigned long flags) { }
    1428             : #endif
    1429             : 
    1430             : /**
    1431             :  * hrtimer_cancel - cancel a timer and wait for the handler to finish.
    1432             :  * @timer:      the timer to be cancelled
    1433             :  *
    1434             :  * Returns:
    1435             :  *  0 when the timer was not active
    1436             :  *  1 when the timer was active
    1437             :  */
    1438         333 : int hrtimer_cancel(struct hrtimer *timer)
    1439             : {
    1440             :         int ret;
    1441             : 
    1442             :         do {
    1443         333 :                 ret = hrtimer_try_to_cancel(timer);
    1444             : 
    1445         333 :                 if (ret < 0)
    1446           0 :                         hrtimer_cancel_wait_running(timer);
    1447         333 :         } while (ret < 0);
    1448         333 :         return ret;
    1449             : }
    1450             : EXPORT_SYMBOL_GPL(hrtimer_cancel);
    1451             : 
    1452             : /**
    1453             :  * __hrtimer_get_remaining - get remaining time for the timer
    1454             :  * @timer:      the timer to read
    1455             :  * @adjust:     adjust relative timers when CONFIG_TIME_LOW_RES=y
    1456             :  */
    1457           0 : ktime_t __hrtimer_get_remaining(const struct hrtimer *timer, bool adjust)
    1458             : {
    1459             :         unsigned long flags;
    1460             :         ktime_t rem;
    1461             : 
    1462           0 :         lock_hrtimer_base(timer, &flags);
    1463             :         if (IS_ENABLED(CONFIG_TIME_LOW_RES) && adjust)
    1464             :                 rem = hrtimer_expires_remaining_adjusted(timer);
    1465             :         else
    1466           0 :                 rem = hrtimer_expires_remaining(timer);
    1467           0 :         unlock_hrtimer_base(timer, &flags);
    1468             : 
    1469           0 :         return rem;
    1470             : }
    1471             : EXPORT_SYMBOL_GPL(__hrtimer_get_remaining);
    1472             : 
    1473             : #ifdef CONFIG_NO_HZ_COMMON
    1474             : /**
    1475             :  * hrtimer_get_next_event - get the time until next expiry event
    1476             :  *
    1477             :  * Returns the next expiry time or KTIME_MAX if no timer is pending.
    1478             :  */
    1479             : u64 hrtimer_get_next_event(void)
    1480             : {
    1481             :         struct hrtimer_cpu_base *cpu_base = this_cpu_ptr(&hrtimer_bases);
    1482             :         u64 expires = KTIME_MAX;
    1483             :         unsigned long flags;
    1484             : 
    1485             :         raw_spin_lock_irqsave(&cpu_base->lock, flags);
    1486             : 
    1487             :         if (!__hrtimer_hres_active(cpu_base))
    1488             :                 expires = __hrtimer_get_next_event(cpu_base, HRTIMER_ACTIVE_ALL);
    1489             : 
    1490             :         raw_spin_unlock_irqrestore(&cpu_base->lock, flags);
    1491             : 
    1492             :         return expires;
    1493             : }
    1494             : 
    1495             : /**
    1496             :  * hrtimer_next_event_without - time until next expiry event w/o one timer
    1497             :  * @exclude:    timer to exclude
    1498             :  *
    1499             :  * Returns the next expiry time over all timers except for the @exclude one or
    1500             :  * KTIME_MAX if none of them is pending.
    1501             :  */
    1502             : u64 hrtimer_next_event_without(const struct hrtimer *exclude)
    1503             : {
    1504             :         struct hrtimer_cpu_base *cpu_base = this_cpu_ptr(&hrtimer_bases);
    1505             :         u64 expires = KTIME_MAX;
    1506             :         unsigned long flags;
    1507             : 
    1508             :         raw_spin_lock_irqsave(&cpu_base->lock, flags);
    1509             : 
    1510             :         if (__hrtimer_hres_active(cpu_base)) {
    1511             :                 unsigned int active;
    1512             : 
    1513             :                 if (!cpu_base->softirq_activated) {
    1514             :                         active = cpu_base->active_bases & HRTIMER_ACTIVE_SOFT;
    1515             :                         expires = __hrtimer_next_event_base(cpu_base, exclude,
    1516             :                                                             active, KTIME_MAX);
    1517             :                 }
    1518             :                 active = cpu_base->active_bases & HRTIMER_ACTIVE_HARD;
    1519             :                 expires = __hrtimer_next_event_base(cpu_base, exclude, active,
    1520             :                                                     expires);
    1521             :         }
    1522             : 
    1523             :         raw_spin_unlock_irqrestore(&cpu_base->lock, flags);
    1524             : 
    1525             :         return expires;
    1526             : }
    1527             : #endif
    1528             : 
    1529        1617 : static inline int hrtimer_clockid_to_base(clockid_t clock_id)
    1530             : {
    1531        1617 :         if (likely(clock_id < MAX_CLOCKS)) {
    1532        1617 :                 int base = hrtimer_clock_to_base_table[clock_id];
    1533             : 
    1534        1617 :                 if (likely(base != HRTIMER_MAX_CLOCK_BASES))
    1535             :                         return base;
    1536             :         }
    1537           0 :         WARN(1, "Invalid clockid %d. Using MONOTONIC\n", clock_id);
    1538           0 :         return HRTIMER_BASE_MONOTONIC;
    1539             : }
    1540             : 
    1541        1617 : static void __hrtimer_init(struct hrtimer *timer, clockid_t clock_id,
    1542             :                            enum hrtimer_mode mode)
    1543             : {
    1544        1617 :         bool softtimer = !!(mode & HRTIMER_MODE_SOFT);
    1545             :         struct hrtimer_cpu_base *cpu_base;
    1546             :         int base;
    1547             : 
    1548             :         /*
    1549             :          * On PREEMPT_RT enabled kernels hrtimers which are not explicitly
    1550             :          * marked for hard interrupt expiry mode are moved into soft
    1551             :          * interrupt context for latency reasons and because the callbacks
    1552             :          * can invoke functions which might sleep on RT, e.g. spin_lock().
    1553             :          */
    1554             :         if (IS_ENABLED(CONFIG_PREEMPT_RT) && !(mode & HRTIMER_MODE_HARD))
    1555             :                 softtimer = true;
    1556             : 
    1557        1617 :         memset(timer, 0, sizeof(struct hrtimer));
    1558             : 
    1559        1617 :         cpu_base = raw_cpu_ptr(&hrtimer_bases);
    1560             : 
    1561             :         /*
    1562             :          * POSIX magic: Relative CLOCK_REALTIME timers are not affected by
    1563             :          * clock modifications, so they needs to become CLOCK_MONOTONIC to
    1564             :          * ensure POSIX compliance.
    1565             :          */
    1566        1617 :         if (clock_id == CLOCK_REALTIME && mode & HRTIMER_MODE_REL)
    1567           0 :                 clock_id = CLOCK_MONOTONIC;
    1568             : 
    1569        1617 :         base = softtimer ? HRTIMER_MAX_CLOCK_BASES / 2 : 0;
    1570        1617 :         base += hrtimer_clockid_to_base(clock_id);
    1571        1617 :         timer->is_soft = softtimer;
    1572        1617 :         timer->is_hard = !!(mode & HRTIMER_MODE_HARD);
    1573        1617 :         timer->base = &cpu_base->clock_base[base];
    1574        3234 :         timerqueue_init(&timer->node);
    1575        1617 : }
    1576             : 
    1577             : /**
    1578             :  * hrtimer_init - initialize a timer to the given clock
    1579             :  * @timer:      the timer to be initialized
    1580             :  * @clock_id:   the clock to be used
    1581             :  * @mode:       The modes which are relevant for initialization:
    1582             :  *              HRTIMER_MODE_ABS, HRTIMER_MODE_REL, HRTIMER_MODE_ABS_SOFT,
    1583             :  *              HRTIMER_MODE_REL_SOFT
    1584             :  *
    1585             :  *              The PINNED variants of the above can be handed in,
    1586             :  *              but the PINNED bit is ignored as pinning happens
    1587             :  *              when the hrtimer is started
    1588             :  */
    1589        1617 : void hrtimer_init(struct hrtimer *timer, clockid_t clock_id,
    1590             :                   enum hrtimer_mode mode)
    1591             : {
    1592        1617 :         debug_init(timer, clock_id, mode);
    1593        1617 :         __hrtimer_init(timer, clock_id, mode);
    1594        1617 : }
    1595             : EXPORT_SYMBOL_GPL(hrtimer_init);
    1596             : 
    1597             : /*
    1598             :  * A timer is active, when it is enqueued into the rbtree or the
    1599             :  * callback function is running or it's in the state of being migrated
    1600             :  * to another cpu.
    1601             :  *
    1602             :  * It is important for this function to not return a false negative.
    1603             :  */
    1604         333 : bool hrtimer_active(const struct hrtimer *timer)
    1605             : {
    1606             :         struct hrtimer_clock_base *base;
    1607             :         unsigned int seq;
    1608             : 
    1609             :         do {
    1610         333 :                 base = READ_ONCE(timer->base);
    1611         999 :                 seq = raw_read_seqcount_begin(&base->seq);
    1612             : 
    1613         666 :                 if (timer->state != HRTIMER_STATE_INACTIVE ||
    1614         333 :                     base->running == timer)
    1615             :                         return true;
    1616             : 
    1617        1332 :         } while (read_seqcount_retry(&base->seq, seq) ||
    1618         333 :                  base != READ_ONCE(timer->base));
    1619             : 
    1620             :         return false;
    1621             : }
    1622             : EXPORT_SYMBOL_GPL(hrtimer_active);
    1623             : 
    1624             : /*
    1625             :  * The write_seqcount_barrier()s in __run_hrtimer() split the thing into 3
    1626             :  * distinct sections:
    1627             :  *
    1628             :  *  - queued:   the timer is queued
    1629             :  *  - callback: the timer is being ran
    1630             :  *  - post:     the timer is inactive or (re)queued
    1631             :  *
    1632             :  * On the read side we ensure we observe timer->state and cpu_base->running
    1633             :  * from the same section, if anything changed while we looked at it, we retry.
    1634             :  * This includes timer->base changing because sequence numbers alone are
    1635             :  * insufficient for that.
    1636             :  *
    1637             :  * The sequence numbers are required because otherwise we could still observe
    1638             :  * a false negative if the read side got smeared over multiple consecutive
    1639             :  * __run_hrtimer() invocations.
    1640             :  */
    1641             : 
    1642           0 : static void __run_hrtimer(struct hrtimer_cpu_base *cpu_base,
    1643             :                           struct hrtimer_clock_base *base,
    1644             :                           struct hrtimer *timer, ktime_t *now,
    1645             :                           unsigned long flags) __must_hold(&cpu_base->lock)
    1646             : {
    1647             :         enum hrtimer_restart (*fn)(struct hrtimer *);
    1648             :         bool expires_in_hardirq;
    1649             :         int restart;
    1650             : 
    1651             :         lockdep_assert_held(&cpu_base->lock);
    1652             : 
    1653           0 :         debug_deactivate(timer);
    1654           0 :         base->running = timer;
    1655             : 
    1656             :         /*
    1657             :          * Separate the ->running assignment from the ->state assignment.
    1658             :          *
    1659             :          * As with a regular write barrier, this ensures the read side in
    1660             :          * hrtimer_active() cannot observe base->running == NULL &&
    1661             :          * timer->state == INACTIVE.
    1662             :          */
    1663           0 :         raw_write_seqcount_barrier(&base->seq);
    1664             : 
    1665           0 :         __remove_hrtimer(timer, base, HRTIMER_STATE_INACTIVE, 0);
    1666           0 :         fn = timer->function;
    1667             : 
    1668             :         /*
    1669             :          * Clear the 'is relative' flag for the TIME_LOW_RES case. If the
    1670             :          * timer is restarted with a period then it becomes an absolute
    1671             :          * timer. If its not restarted it does not matter.
    1672             :          */
    1673             :         if (IS_ENABLED(CONFIG_TIME_LOW_RES))
    1674             :                 timer->is_rel = false;
    1675             : 
    1676             :         /*
    1677             :          * The timer is marked as running in the CPU base, so it is
    1678             :          * protected against migration to a different CPU even if the lock
    1679             :          * is dropped.
    1680             :          */
    1681           0 :         raw_spin_unlock_irqrestore(&cpu_base->lock, flags);
    1682           0 :         trace_hrtimer_expire_entry(timer, now);
    1683           0 :         expires_in_hardirq = lockdep_hrtimer_enter(timer);
    1684             : 
    1685           0 :         restart = fn(timer);
    1686             : 
    1687             :         lockdep_hrtimer_exit(expires_in_hardirq);
    1688           0 :         trace_hrtimer_expire_exit(timer);
    1689           0 :         raw_spin_lock_irq(&cpu_base->lock);
    1690             : 
    1691             :         /*
    1692             :          * Note: We clear the running state after enqueue_hrtimer and
    1693             :          * we do not reprogram the event hardware. Happens either in
    1694             :          * hrtimer_start_range_ns() or in hrtimer_interrupt()
    1695             :          *
    1696             :          * Note: Because we dropped the cpu_base->lock above,
    1697             :          * hrtimer_start_range_ns() can have popped in and enqueued the timer
    1698             :          * for us already.
    1699             :          */
    1700           0 :         if (restart != HRTIMER_NORESTART &&
    1701           0 :             !(timer->state & HRTIMER_STATE_ENQUEUED))
    1702           0 :                 enqueue_hrtimer(timer, base, HRTIMER_MODE_ABS);
    1703             : 
    1704             :         /*
    1705             :          * Separate the ->running assignment from the ->state assignment.
    1706             :          *
    1707             :          * As with a regular write barrier, this ensures the read side in
    1708             :          * hrtimer_active() cannot observe base->running.timer == NULL &&
    1709             :          * timer->state == INACTIVE.
    1710             :          */
    1711           0 :         raw_write_seqcount_barrier(&base->seq);
    1712             : 
    1713           0 :         WARN_ON_ONCE(base->running != timer);
    1714           0 :         base->running = NULL;
    1715           0 : }
    1716             : 
    1717        2751 : static void __hrtimer_run_queues(struct hrtimer_cpu_base *cpu_base, ktime_t now,
    1718             :                                  unsigned long flags, unsigned int active_mask)
    1719             : {
    1720             :         struct hrtimer_clock_base *base;
    1721        2751 :         unsigned int active = cpu_base->active_bases & active_mask;
    1722             : 
    1723        5502 :         for_each_active_base(base, cpu_base, active) {
    1724             :                 struct timerqueue_node *node;
    1725             :                 ktime_t basenow;
    1726             : 
    1727           0 :                 basenow = ktime_add(now, base->offset);
    1728             : 
    1729           0 :                 while ((node = timerqueue_getnext(&base->active))) {
    1730             :                         struct hrtimer *timer;
    1731             : 
    1732           0 :                         timer = container_of(node, struct hrtimer, node);
    1733             : 
    1734             :                         /*
    1735             :                          * The immediate goal for using the softexpires is
    1736             :                          * minimizing wakeups, not running timers at the
    1737             :                          * earliest interrupt after their soft expiration.
    1738             :                          * This allows us to avoid using a Priority Search
    1739             :                          * Tree, which can answer a stabbing query for
    1740             :                          * overlapping intervals and instead use the simple
    1741             :                          * BST we already have.
    1742             :                          * We don't add extra wakeups by delaying timers that
    1743             :                          * are right-of a not yet expired timer, because that
    1744             :                          * timer will have to trigger a wakeup anyway.
    1745             :                          */
    1746           0 :                         if (basenow < hrtimer_get_softexpires_tv64(timer))
    1747             :                                 break;
    1748             : 
    1749           0 :                         __run_hrtimer(cpu_base, base, timer, &basenow, flags);
    1750             :                         if (active_mask == HRTIMER_ACTIVE_SOFT)
    1751             :                                 hrtimer_sync_wait_running(cpu_base, flags);
    1752             :                 }
    1753             :         }
    1754        2751 : }
    1755             : 
    1756           0 : static __latent_entropy void hrtimer_run_softirq(struct softirq_action *h)
    1757             : {
    1758           0 :         struct hrtimer_cpu_base *cpu_base = this_cpu_ptr(&hrtimer_bases);
    1759             :         unsigned long flags;
    1760             :         ktime_t now;
    1761             : 
    1762           0 :         hrtimer_cpu_base_lock_expiry(cpu_base);
    1763           0 :         raw_spin_lock_irqsave(&cpu_base->lock, flags);
    1764             : 
    1765           0 :         now = hrtimer_update_base(cpu_base);
    1766           0 :         __hrtimer_run_queues(cpu_base, now, flags, HRTIMER_ACTIVE_SOFT);
    1767             : 
    1768           0 :         cpu_base->softirq_activated = 0;
    1769           0 :         hrtimer_update_softirq_timer(cpu_base, true);
    1770             : 
    1771           0 :         raw_spin_unlock_irqrestore(&cpu_base->lock, flags);
    1772           0 :         hrtimer_cpu_base_unlock_expiry(cpu_base);
    1773           0 : }
    1774             : 
    1775             : #ifdef CONFIG_HIGH_RES_TIMERS
    1776             : 
    1777             : /*
    1778             :  * High resolution timer interrupt
    1779             :  * Called with interrupts disabled
    1780             :  */
    1781             : void hrtimer_interrupt(struct clock_event_device *dev)
    1782             : {
    1783             :         struct hrtimer_cpu_base *cpu_base = this_cpu_ptr(&hrtimer_bases);
    1784             :         ktime_t expires_next, now, entry_time, delta;
    1785             :         unsigned long flags;
    1786             :         int retries = 0;
    1787             : 
    1788             :         BUG_ON(!cpu_base->hres_active);
    1789             :         cpu_base->nr_events++;
    1790             :         dev->next_event = KTIME_MAX;
    1791             : 
    1792             :         raw_spin_lock_irqsave(&cpu_base->lock, flags);
    1793             :         entry_time = now = hrtimer_update_base(cpu_base);
    1794             : retry:
    1795             :         cpu_base->in_hrtirq = 1;
    1796             :         /*
    1797             :          * We set expires_next to KTIME_MAX here with cpu_base->lock
    1798             :          * held to prevent that a timer is enqueued in our queue via
    1799             :          * the migration code. This does not affect enqueueing of
    1800             :          * timers which run their callback and need to be requeued on
    1801             :          * this CPU.
    1802             :          */
    1803             :         cpu_base->expires_next = KTIME_MAX;
    1804             : 
    1805             :         if (!ktime_before(now, cpu_base->softirq_expires_next)) {
    1806             :                 cpu_base->softirq_expires_next = KTIME_MAX;
    1807             :                 cpu_base->softirq_activated = 1;
    1808             :                 raise_softirq_irqoff(HRTIMER_SOFTIRQ);
    1809             :         }
    1810             : 
    1811             :         __hrtimer_run_queues(cpu_base, now, flags, HRTIMER_ACTIVE_HARD);
    1812             : 
    1813             :         /* Reevaluate the clock bases for the [soft] next expiry */
    1814             :         expires_next = hrtimer_update_next_event(cpu_base);
    1815             :         /*
    1816             :          * Store the new expiry value so the migration code can verify
    1817             :          * against it.
    1818             :          */
    1819             :         cpu_base->expires_next = expires_next;
    1820             :         cpu_base->in_hrtirq = 0;
    1821             :         raw_spin_unlock_irqrestore(&cpu_base->lock, flags);
    1822             : 
    1823             :         /* Reprogramming necessary ? */
    1824             :         if (!tick_program_event(expires_next, 0)) {
    1825             :                 cpu_base->hang_detected = 0;
    1826             :                 return;
    1827             :         }
    1828             : 
    1829             :         /*
    1830             :          * The next timer was already expired due to:
    1831             :          * - tracing
    1832             :          * - long lasting callbacks
    1833             :          * - being scheduled away when running in a VM
    1834             :          *
    1835             :          * We need to prevent that we loop forever in the hrtimer
    1836             :          * interrupt routine. We give it 3 attempts to avoid
    1837             :          * overreacting on some spurious event.
    1838             :          *
    1839             :          * Acquire base lock for updating the offsets and retrieving
    1840             :          * the current time.
    1841             :          */
    1842             :         raw_spin_lock_irqsave(&cpu_base->lock, flags);
    1843             :         now = hrtimer_update_base(cpu_base);
    1844             :         cpu_base->nr_retries++;
    1845             :         if (++retries < 3)
    1846             :                 goto retry;
    1847             :         /*
    1848             :          * Give the system a chance to do something else than looping
    1849             :          * here. We stored the entry time, so we know exactly how long
    1850             :          * we spent here. We schedule the next event this amount of
    1851             :          * time away.
    1852             :          */
    1853             :         cpu_base->nr_hangs++;
    1854             :         cpu_base->hang_detected = 1;
    1855             :         raw_spin_unlock_irqrestore(&cpu_base->lock, flags);
    1856             : 
    1857             :         delta = ktime_sub(now, entry_time);
    1858             :         if ((unsigned int)delta > cpu_base->max_hang_time)
    1859             :                 cpu_base->max_hang_time = (unsigned int) delta;
    1860             :         /*
    1861             :          * Limit it to a sensible value as we enforce a longer
    1862             :          * delay. Give the CPU at least 100ms to catch up.
    1863             :          */
    1864             :         if (delta > 100 * NSEC_PER_MSEC)
    1865             :                 expires_next = ktime_add_ns(now, 100 * NSEC_PER_MSEC);
    1866             :         else
    1867             :                 expires_next = ktime_add(now, delta);
    1868             :         tick_program_event(expires_next, 1);
    1869             :         pr_warn_once("hrtimer: interrupt took %llu ns\n", ktime_to_ns(delta));
    1870             : }
    1871             : 
    1872             : /* called with interrupts disabled */
    1873             : static inline void __hrtimer_peek_ahead_timers(void)
    1874             : {
    1875             :         struct tick_device *td;
    1876             : 
    1877             :         if (!hrtimer_hres_active())
    1878             :                 return;
    1879             : 
    1880             :         td = this_cpu_ptr(&tick_cpu_device);
    1881             :         if (td && td->evtdev)
    1882             :                 hrtimer_interrupt(td->evtdev);
    1883             : }
    1884             : 
    1885             : #else /* CONFIG_HIGH_RES_TIMERS */
    1886             : 
    1887             : static inline void __hrtimer_peek_ahead_timers(void) { }
    1888             : 
    1889             : #endif  /* !CONFIG_HIGH_RES_TIMERS */
    1890             : 
    1891             : /*
    1892             :  * Called from run_local_timers in hardirq context every jiffy
    1893             :  */
    1894        2751 : void hrtimer_run_queues(void)
    1895             : {
    1896        2751 :         struct hrtimer_cpu_base *cpu_base = this_cpu_ptr(&hrtimer_bases);
    1897             :         unsigned long flags;
    1898             :         ktime_t now;
    1899             : 
    1900        2751 :         if (__hrtimer_hres_active(cpu_base))
    1901             :                 return;
    1902             : 
    1903             :         /*
    1904             :          * This _is_ ugly: We have to check periodically, whether we
    1905             :          * can switch to highres and / or nohz mode. The clocksource
    1906             :          * switch happens with xtime_lock held. Notification from
    1907             :          * there only sets the check bit in the tick_oneshot code,
    1908             :          * otherwise we might deadlock vs. xtime_lock.
    1909             :          */
    1910        2751 :         if (tick_check_oneshot_change(!hrtimer_is_hres_enabled())) {
    1911             :                 hrtimer_switch_to_hres();
    1912             :                 return;
    1913             :         }
    1914             : 
    1915        2751 :         raw_spin_lock_irqsave(&cpu_base->lock, flags);
    1916        2751 :         now = hrtimer_update_base(cpu_base);
    1917             : 
    1918        5502 :         if (!ktime_before(now, cpu_base->softirq_expires_next)) {
    1919           0 :                 cpu_base->softirq_expires_next = KTIME_MAX;
    1920           0 :                 cpu_base->softirq_activated = 1;
    1921           0 :                 raise_softirq_irqoff(HRTIMER_SOFTIRQ);
    1922             :         }
    1923             : 
    1924        2751 :         __hrtimer_run_queues(cpu_base, now, flags, HRTIMER_ACTIVE_HARD);
    1925        5502 :         raw_spin_unlock_irqrestore(&cpu_base->lock, flags);
    1926             : }
    1927             : 
    1928             : /*
    1929             :  * Sleep related functions:
    1930             :  */
    1931           0 : static enum hrtimer_restart hrtimer_wakeup(struct hrtimer *timer)
    1932             : {
    1933           0 :         struct hrtimer_sleeper *t =
    1934           0 :                 container_of(timer, struct hrtimer_sleeper, timer);
    1935           0 :         struct task_struct *task = t->task;
    1936             : 
    1937           0 :         t->task = NULL;
    1938           0 :         if (task)
    1939           0 :                 wake_up_process(task);
    1940             : 
    1941           0 :         return HRTIMER_NORESTART;
    1942             : }
    1943             : 
    1944             : /**
    1945             :  * hrtimer_sleeper_start_expires - Start a hrtimer sleeper timer
    1946             :  * @sl:         sleeper to be started
    1947             :  * @mode:       timer mode abs/rel
    1948             :  *
    1949             :  * Wrapper around hrtimer_start_expires() for hrtimer_sleeper based timers
    1950             :  * to allow PREEMPT_RT to tweak the delivery mode (soft/hardirq context)
    1951             :  */
    1952           0 : void hrtimer_sleeper_start_expires(struct hrtimer_sleeper *sl,
    1953             :                                    enum hrtimer_mode mode)
    1954             : {
    1955             :         /*
    1956             :          * Make the enqueue delivery mode check work on RT. If the sleeper
    1957             :          * was initialized for hard interrupt delivery, force the mode bit.
    1958             :          * This is a special case for hrtimer_sleepers because
    1959             :          * hrtimer_init_sleeper() determines the delivery mode on RT so the
    1960             :          * fiddling with this decision is avoided at the call sites.
    1961             :          */
    1962             :         if (IS_ENABLED(CONFIG_PREEMPT_RT) && sl->timer.is_hard)
    1963             :                 mode |= HRTIMER_MODE_HARD;
    1964             : 
    1965           0 :         hrtimer_start_expires(&sl->timer, mode);
    1966           0 : }
    1967             : EXPORT_SYMBOL_GPL(hrtimer_sleeper_start_expires);
    1968             : 
    1969             : static void __hrtimer_init_sleeper(struct hrtimer_sleeper *sl,
    1970             :                                    clockid_t clock_id, enum hrtimer_mode mode)
    1971             : {
    1972             :         /*
    1973             :          * On PREEMPT_RT enabled kernels hrtimers which are not explicitly
    1974             :          * marked for hard interrupt expiry mode are moved into soft
    1975             :          * interrupt context either for latency reasons or because the
    1976             :          * hrtimer callback takes regular spinlocks or invokes other
    1977             :          * functions which are not suitable for hard interrupt context on
    1978             :          * PREEMPT_RT.
    1979             :          *
    1980             :          * The hrtimer_sleeper callback is RT compatible in hard interrupt
    1981             :          * context, but there is a latency concern: Untrusted userspace can
    1982             :          * spawn many threads which arm timers for the same expiry time on
    1983             :          * the same CPU. That causes a latency spike due to the wakeup of
    1984             :          * a gazillion threads.
    1985             :          *
    1986             :          * OTOH, privileged real-time user space applications rely on the
    1987             :          * low latency of hard interrupt wakeups. If the current task is in
    1988             :          * a real-time scheduling class, mark the mode for hard interrupt
    1989             :          * expiry.
    1990             :          */
    1991             :         if (IS_ENABLED(CONFIG_PREEMPT_RT)) {
    1992             :                 if (task_is_realtime(current) && !(mode & HRTIMER_MODE_SOFT))
    1993             :                         mode |= HRTIMER_MODE_HARD;
    1994             :         }
    1995             : 
    1996           0 :         __hrtimer_init(&sl->timer, clock_id, mode);
    1997           0 :         sl->timer.function = hrtimer_wakeup;
    1998           0 :         sl->task = current;
    1999             : }
    2000             : 
    2001             : /**
    2002             :  * hrtimer_init_sleeper - initialize sleeper to the given clock
    2003             :  * @sl:         sleeper to be initialized
    2004             :  * @clock_id:   the clock to be used
    2005             :  * @mode:       timer mode abs/rel
    2006             :  */
    2007           0 : void hrtimer_init_sleeper(struct hrtimer_sleeper *sl, clockid_t clock_id,
    2008             :                           enum hrtimer_mode mode)
    2009             : {
    2010           0 :         debug_init(&sl->timer, clock_id, mode);
    2011           0 :         __hrtimer_init_sleeper(sl, clock_id, mode);
    2012             : 
    2013           0 : }
    2014             : EXPORT_SYMBOL_GPL(hrtimer_init_sleeper);
    2015             : 
    2016           0 : int nanosleep_copyout(struct restart_block *restart, struct timespec64 *ts)
    2017             : {
    2018           0 :         switch(restart->nanosleep.type) {
    2019             : #ifdef CONFIG_COMPAT_32BIT_TIME
    2020             :         case TT_COMPAT:
    2021             :                 if (put_old_timespec32(ts, restart->nanosleep.compat_rmtp))
    2022             :                         return -EFAULT;
    2023             :                 break;
    2024             : #endif
    2025             :         case TT_NATIVE:
    2026           0 :                 if (put_timespec64(ts, restart->nanosleep.rmtp))
    2027             :                         return -EFAULT;
    2028             :                 break;
    2029             :         default:
    2030           0 :                 BUG();
    2031             :         }
    2032           0 :         return -ERESTART_RESTARTBLOCK;
    2033             : }
    2034             : 
    2035           0 : static int __sched do_nanosleep(struct hrtimer_sleeper *t, enum hrtimer_mode mode)
    2036             : {
    2037             :         struct restart_block *restart;
    2038             : 
    2039             :         do {
    2040           0 :                 set_current_state(TASK_INTERRUPTIBLE|TASK_FREEZABLE);
    2041           0 :                 hrtimer_sleeper_start_expires(t, mode);
    2042             : 
    2043           0 :                 if (likely(t->task))
    2044           0 :                         schedule();
    2045             : 
    2046           0 :                 hrtimer_cancel(&t->timer);
    2047           0 :                 mode = HRTIMER_MODE_ABS;
    2048             : 
    2049           0 :         } while (t->task && !signal_pending(current));
    2050             : 
    2051           0 :         __set_current_state(TASK_RUNNING);
    2052             : 
    2053           0 :         if (!t->task)
    2054             :                 return 0;
    2055             : 
    2056           0 :         restart = &current->restart_block;
    2057           0 :         if (restart->nanosleep.type != TT_NONE) {
    2058           0 :                 ktime_t rem = hrtimer_expires_remaining(&t->timer);
    2059             :                 struct timespec64 rmt;
    2060             : 
    2061           0 :                 if (rem <= 0)
    2062             :                         return 0;
    2063           0 :                 rmt = ktime_to_timespec64(rem);
    2064             : 
    2065           0 :                 return nanosleep_copyout(restart, &rmt);
    2066             :         }
    2067             :         return -ERESTART_RESTARTBLOCK;
    2068             : }
    2069             : 
    2070           0 : static long __sched hrtimer_nanosleep_restart(struct restart_block *restart)
    2071             : {
    2072             :         struct hrtimer_sleeper t;
    2073             :         int ret;
    2074             : 
    2075           0 :         hrtimer_init_sleeper_on_stack(&t, restart->nanosleep.clockid,
    2076             :                                       HRTIMER_MODE_ABS);
    2077           0 :         hrtimer_set_expires_tv64(&t.timer, restart->nanosleep.expires);
    2078           0 :         ret = do_nanosleep(&t, HRTIMER_MODE_ABS);
    2079           0 :         destroy_hrtimer_on_stack(&t.timer);
    2080           0 :         return ret;
    2081             : }
    2082             : 
    2083           0 : long hrtimer_nanosleep(ktime_t rqtp, const enum hrtimer_mode mode,
    2084             :                        const clockid_t clockid)
    2085             : {
    2086             :         struct restart_block *restart;
    2087             :         struct hrtimer_sleeper t;
    2088           0 :         int ret = 0;
    2089             :         u64 slack;
    2090             : 
    2091           0 :         slack = current->timer_slack_ns;
    2092           0 :         if (rt_task(current))
    2093           0 :                 slack = 0;
    2094             : 
    2095           0 :         hrtimer_init_sleeper_on_stack(&t, clockid, mode);
    2096           0 :         hrtimer_set_expires_range_ns(&t.timer, rqtp, slack);
    2097           0 :         ret = do_nanosleep(&t, mode);
    2098           0 :         if (ret != -ERESTART_RESTARTBLOCK)
    2099             :                 goto out;
    2100             : 
    2101             :         /* Absolute timers do not update the rmtp value and restart: */
    2102           0 :         if (mode == HRTIMER_MODE_ABS) {
    2103             :                 ret = -ERESTARTNOHAND;
    2104             :                 goto out;
    2105             :         }
    2106             : 
    2107           0 :         restart = &current->restart_block;
    2108           0 :         restart->nanosleep.clockid = t.timer.base->clockid;
    2109           0 :         restart->nanosleep.expires = hrtimer_get_expires_tv64(&t.timer);
    2110           0 :         set_restart_fn(restart, hrtimer_nanosleep_restart);
    2111             : out:
    2112           0 :         destroy_hrtimer_on_stack(&t.timer);
    2113           0 :         return ret;
    2114             : }
    2115             : 
    2116             : #ifdef CONFIG_64BIT
    2117             : 
    2118           0 : SYSCALL_DEFINE2(nanosleep, struct __kernel_timespec __user *, rqtp,
    2119             :                 struct __kernel_timespec __user *, rmtp)
    2120             : {
    2121             :         struct timespec64 tu;
    2122             : 
    2123           0 :         if (get_timespec64(&tu, rqtp))
    2124             :                 return -EFAULT;
    2125             : 
    2126           0 :         if (!timespec64_valid(&tu))
    2127             :                 return -EINVAL;
    2128             : 
    2129           0 :         current->restart_block.fn = do_no_restart_syscall;
    2130           0 :         current->restart_block.nanosleep.type = rmtp ? TT_NATIVE : TT_NONE;
    2131           0 :         current->restart_block.nanosleep.rmtp = rmtp;
    2132           0 :         return hrtimer_nanosleep(timespec64_to_ktime(tu), HRTIMER_MODE_REL,
    2133             :                                  CLOCK_MONOTONIC);
    2134             : }
    2135             : 
    2136             : #endif
    2137             : 
    2138             : #ifdef CONFIG_COMPAT_32BIT_TIME
    2139             : 
    2140             : SYSCALL_DEFINE2(nanosleep_time32, struct old_timespec32 __user *, rqtp,
    2141             :                        struct old_timespec32 __user *, rmtp)
    2142             : {
    2143             :         struct timespec64 tu;
    2144             : 
    2145             :         if (get_old_timespec32(&tu, rqtp))
    2146             :                 return -EFAULT;
    2147             : 
    2148             :         if (!timespec64_valid(&tu))
    2149             :                 return -EINVAL;
    2150             : 
    2151             :         current->restart_block.fn = do_no_restart_syscall;
    2152             :         current->restart_block.nanosleep.type = rmtp ? TT_COMPAT : TT_NONE;
    2153             :         current->restart_block.nanosleep.compat_rmtp = rmtp;
    2154             :         return hrtimer_nanosleep(timespec64_to_ktime(tu), HRTIMER_MODE_REL,
    2155             :                                  CLOCK_MONOTONIC);
    2156             : }
    2157             : #endif
    2158             : 
    2159             : /*
    2160             :  * Functions related to boot-time initialization:
    2161             :  */
    2162           0 : int hrtimers_prepare_cpu(unsigned int cpu)
    2163             : {
    2164           1 :         struct hrtimer_cpu_base *cpu_base = &per_cpu(hrtimer_bases, cpu);
    2165             :         int i;
    2166             : 
    2167           9 :         for (i = 0; i < HRTIMER_MAX_CLOCK_BASES; i++) {
    2168           8 :                 struct hrtimer_clock_base *clock_b = &cpu_base->clock_base[i];
    2169             : 
    2170           8 :                 clock_b->cpu_base = cpu_base;
    2171          16 :                 seqcount_raw_spinlock_init(&clock_b->seq, &cpu_base->lock);
    2172          16 :                 timerqueue_init_head(&clock_b->active);
    2173             :         }
    2174             : 
    2175           1 :         cpu_base->cpu = cpu;
    2176           1 :         cpu_base->active_bases = 0;
    2177           1 :         cpu_base->hres_active = 0;
    2178           1 :         cpu_base->hang_detected = 0;
    2179           1 :         cpu_base->next_timer = NULL;
    2180           1 :         cpu_base->softirq_next_timer = NULL;
    2181           1 :         cpu_base->expires_next = KTIME_MAX;
    2182           1 :         cpu_base->softirq_expires_next = KTIME_MAX;
    2183           1 :         hrtimer_cpu_base_init_expiry_lock(cpu_base);
    2184           0 :         return 0;
    2185             : }
    2186             : 
    2187             : #ifdef CONFIG_HOTPLUG_CPU
    2188             : 
    2189             : static void migrate_hrtimer_list(struct hrtimer_clock_base *old_base,
    2190             :                                 struct hrtimer_clock_base *new_base)
    2191             : {
    2192             :         struct hrtimer *timer;
    2193             :         struct timerqueue_node *node;
    2194             : 
    2195             :         while ((node = timerqueue_getnext(&old_base->active))) {
    2196             :                 timer = container_of(node, struct hrtimer, node);
    2197             :                 BUG_ON(hrtimer_callback_running(timer));
    2198             :                 debug_deactivate(timer);
    2199             : 
    2200             :                 /*
    2201             :                  * Mark it as ENQUEUED not INACTIVE otherwise the
    2202             :                  * timer could be seen as !active and just vanish away
    2203             :                  * under us on another CPU
    2204             :                  */
    2205             :                 __remove_hrtimer(timer, old_base, HRTIMER_STATE_ENQUEUED, 0);
    2206             :                 timer->base = new_base;
    2207             :                 /*
    2208             :                  * Enqueue the timers on the new cpu. This does not
    2209             :                  * reprogram the event device in case the timer
    2210             :                  * expires before the earliest on this CPU, but we run
    2211             :                  * hrtimer_interrupt after we migrated everything to
    2212             :                  * sort out already expired timers and reprogram the
    2213             :                  * event device.
    2214             :                  */
    2215             :                 enqueue_hrtimer(timer, new_base, HRTIMER_MODE_ABS);
    2216             :         }
    2217             : }
    2218             : 
    2219             : int hrtimers_dead_cpu(unsigned int scpu)
    2220             : {
    2221             :         struct hrtimer_cpu_base *old_base, *new_base;
    2222             :         int i;
    2223             : 
    2224             :         BUG_ON(cpu_online(scpu));
    2225             :         tick_cancel_sched_timer(scpu);
    2226             : 
    2227             :         /*
    2228             :          * this BH disable ensures that raise_softirq_irqoff() does
    2229             :          * not wakeup ksoftirqd (and acquire the pi-lock) while
    2230             :          * holding the cpu_base lock
    2231             :          */
    2232             :         local_bh_disable();
    2233             :         local_irq_disable();
    2234             :         old_base = &per_cpu(hrtimer_bases, scpu);
    2235             :         new_base = this_cpu_ptr(&hrtimer_bases);
    2236             :         /*
    2237             :          * The caller is globally serialized and nobody else
    2238             :          * takes two locks at once, deadlock is not possible.
    2239             :          */
    2240             :         raw_spin_lock(&new_base->lock);
    2241             :         raw_spin_lock_nested(&old_base->lock, SINGLE_DEPTH_NESTING);
    2242             : 
    2243             :         for (i = 0; i < HRTIMER_MAX_CLOCK_BASES; i++) {
    2244             :                 migrate_hrtimer_list(&old_base->clock_base[i],
    2245             :                                      &new_base->clock_base[i]);
    2246             :         }
    2247             : 
    2248             :         /*
    2249             :          * The migration might have changed the first expiring softirq
    2250             :          * timer on this CPU. Update it.
    2251             :          */
    2252             :         hrtimer_update_softirq_timer(new_base, false);
    2253             : 
    2254             :         raw_spin_unlock(&old_base->lock);
    2255             :         raw_spin_unlock(&new_base->lock);
    2256             : 
    2257             :         /* Check, if we got expired work to do */
    2258             :         __hrtimer_peek_ahead_timers();
    2259             :         local_irq_enable();
    2260             :         local_bh_enable();
    2261             :         return 0;
    2262             : }
    2263             : 
    2264             : #endif /* CONFIG_HOTPLUG_CPU */
    2265             : 
    2266           1 : void __init hrtimers_init(void)
    2267             : {
    2268           1 :         hrtimers_prepare_cpu(smp_processor_id());
    2269           1 :         open_softirq(HRTIMER_SOFTIRQ, hrtimer_run_softirq);
    2270           1 : }
    2271             : 
    2272             : /**
    2273             :  * schedule_hrtimeout_range_clock - sleep until timeout
    2274             :  * @expires:    timeout value (ktime_t)
    2275             :  * @delta:      slack in expires timeout (ktime_t) for SCHED_OTHER tasks
    2276             :  * @mode:       timer mode
    2277             :  * @clock_id:   timer clock to be used
    2278             :  */
    2279             : int __sched
    2280           0 : schedule_hrtimeout_range_clock(ktime_t *expires, u64 delta,
    2281             :                                const enum hrtimer_mode mode, clockid_t clock_id)
    2282             : {
    2283             :         struct hrtimer_sleeper t;
    2284             : 
    2285             :         /*
    2286             :          * Optimize when a zero timeout value is given. It does not
    2287             :          * matter whether this is an absolute or a relative time.
    2288             :          */
    2289           0 :         if (expires && *expires == 0) {
    2290           0 :                 __set_current_state(TASK_RUNNING);
    2291           0 :                 return 0;
    2292             :         }
    2293             : 
    2294             :         /*
    2295             :          * A NULL parameter means "infinite"
    2296             :          */
    2297           0 :         if (!expires) {
    2298           0 :                 schedule();
    2299           0 :                 return -EINTR;
    2300             :         }
    2301             : 
    2302             :         /*
    2303             :          * Override any slack passed by the user if under
    2304             :          * rt contraints.
    2305             :          */
    2306           0 :         if (rt_task(current))
    2307           0 :                 delta = 0;
    2308             : 
    2309           0 :         hrtimer_init_sleeper_on_stack(&t, clock_id, mode);
    2310           0 :         hrtimer_set_expires_range_ns(&t.timer, *expires, delta);
    2311           0 :         hrtimer_sleeper_start_expires(&t, mode);
    2312             : 
    2313           0 :         if (likely(t.task))
    2314           0 :                 schedule();
    2315             : 
    2316           0 :         hrtimer_cancel(&t.timer);
    2317           0 :         destroy_hrtimer_on_stack(&t.timer);
    2318             : 
    2319           0 :         __set_current_state(TASK_RUNNING);
    2320             : 
    2321           0 :         return !t.task ? 0 : -EINTR;
    2322             : }
    2323             : EXPORT_SYMBOL_GPL(schedule_hrtimeout_range_clock);
    2324             : 
    2325             : /**
    2326             :  * schedule_hrtimeout_range - sleep until timeout
    2327             :  * @expires:    timeout value (ktime_t)
    2328             :  * @delta:      slack in expires timeout (ktime_t) for SCHED_OTHER tasks
    2329             :  * @mode:       timer mode
    2330             :  *
    2331             :  * Make the current task sleep until the given expiry time has
    2332             :  * elapsed. The routine will return immediately unless
    2333             :  * the current task state has been set (see set_current_state()).
    2334             :  *
    2335             :  * The @delta argument gives the kernel the freedom to schedule the
    2336             :  * actual wakeup to a time that is both power and performance friendly
    2337             :  * for regular (non RT/DL) tasks.
    2338             :  * The kernel give the normal best effort behavior for "@expires+@delta",
    2339             :  * but may decide to fire the timer earlier, but no earlier than @expires.
    2340             :  *
    2341             :  * You can set the task state as follows -
    2342             :  *
    2343             :  * %TASK_UNINTERRUPTIBLE - at least @timeout time is guaranteed to
    2344             :  * pass before the routine returns unless the current task is explicitly
    2345             :  * woken up, (e.g. by wake_up_process()).
    2346             :  *
    2347             :  * %TASK_INTERRUPTIBLE - the routine may return early if a signal is
    2348             :  * delivered to the current task or the current task is explicitly woken
    2349             :  * up.
    2350             :  *
    2351             :  * The current task state is guaranteed to be TASK_RUNNING when this
    2352             :  * routine returns.
    2353             :  *
    2354             :  * Returns 0 when the timer has expired. If the task was woken before the
    2355             :  * timer expired by a signal (only possible in state TASK_INTERRUPTIBLE) or
    2356             :  * by an explicit wakeup, it returns -EINTR.
    2357             :  */
    2358           0 : int __sched schedule_hrtimeout_range(ktime_t *expires, u64 delta,
    2359             :                                      const enum hrtimer_mode mode)
    2360             : {
    2361           0 :         return schedule_hrtimeout_range_clock(expires, delta, mode,
    2362             :                                               CLOCK_MONOTONIC);
    2363             : }
    2364             : EXPORT_SYMBOL_GPL(schedule_hrtimeout_range);
    2365             : 
    2366             : /**
    2367             :  * schedule_hrtimeout - sleep until timeout
    2368             :  * @expires:    timeout value (ktime_t)
    2369             :  * @mode:       timer mode
    2370             :  *
    2371             :  * Make the current task sleep until the given expiry time has
    2372             :  * elapsed. The routine will return immediately unless
    2373             :  * the current task state has been set (see set_current_state()).
    2374             :  *
    2375             :  * You can set the task state as follows -
    2376             :  *
    2377             :  * %TASK_UNINTERRUPTIBLE - at least @timeout time is guaranteed to
    2378             :  * pass before the routine returns unless the current task is explicitly
    2379             :  * woken up, (e.g. by wake_up_process()).
    2380             :  *
    2381             :  * %TASK_INTERRUPTIBLE - the routine may return early if a signal is
    2382             :  * delivered to the current task or the current task is explicitly woken
    2383             :  * up.
    2384             :  *
    2385             :  * The current task state is guaranteed to be TASK_RUNNING when this
    2386             :  * routine returns.
    2387             :  *
    2388             :  * Returns 0 when the timer has expired. If the task was woken before the
    2389             :  * timer expired by a signal (only possible in state TASK_INTERRUPTIBLE) or
    2390             :  * by an explicit wakeup, it returns -EINTR.
    2391             :  */
    2392           0 : int __sched schedule_hrtimeout(ktime_t *expires,
    2393             :                                const enum hrtimer_mode mode)
    2394             : {
    2395           0 :         return schedule_hrtimeout_range(expires, 0, mode);
    2396             : }
    2397             : EXPORT_SYMBOL_GPL(schedule_hrtimeout);

Generated by: LCOV version 1.14