15cee9645SThomas Gleixner /* 25cee9645SThomas Gleixner * linux/kernel/timer.c 35cee9645SThomas Gleixner * 45cee9645SThomas Gleixner * Kernel internal timers 55cee9645SThomas Gleixner * 65cee9645SThomas Gleixner * Copyright (C) 1991, 1992 Linus Torvalds 75cee9645SThomas Gleixner * 85cee9645SThomas Gleixner * 1997-01-28 Modified by Finn Arne Gangstad to make timers scale better. 95cee9645SThomas Gleixner * 105cee9645SThomas Gleixner * 1997-09-10 Updated NTP code according to technical memorandum Jan '96 115cee9645SThomas Gleixner * "A Kernel Model for Precision Timekeeping" by Dave Mills 125cee9645SThomas Gleixner * 1998-12-24 Fixed a xtime SMP race (we need the xtime_lock rw spinlock to 135cee9645SThomas Gleixner * serialize accesses to xtime/lost_ticks). 145cee9645SThomas Gleixner * Copyright (C) 1998 Andrea Arcangeli 155cee9645SThomas Gleixner * 1999-03-10 Improved NTP compatibility by Ulrich Windl 165cee9645SThomas Gleixner * 2002-05-31 Move sys_sysinfo here and make its locking sane, Robert Love 175cee9645SThomas Gleixner * 2000-10-05 Implemented scalable SMP per-CPU timer handling. 185cee9645SThomas Gleixner * Copyright (C) 2000, 2001, 2002 Ingo Molnar 195cee9645SThomas Gleixner * Designed by David S. Miller, Alexey Kuznetsov and Ingo Molnar 205cee9645SThomas Gleixner */ 215cee9645SThomas Gleixner 225cee9645SThomas Gleixner #include <linux/kernel_stat.h> 235cee9645SThomas Gleixner #include <linux/export.h> 245cee9645SThomas Gleixner #include <linux/interrupt.h> 255cee9645SThomas Gleixner #include <linux/percpu.h> 265cee9645SThomas Gleixner #include <linux/init.h> 275cee9645SThomas Gleixner #include <linux/mm.h> 285cee9645SThomas Gleixner #include <linux/swap.h> 295cee9645SThomas Gleixner #include <linux/pid_namespace.h> 305cee9645SThomas Gleixner #include <linux/notifier.h> 315cee9645SThomas Gleixner #include <linux/thread_info.h> 325cee9645SThomas Gleixner #include <linux/time.h> 335cee9645SThomas Gleixner #include <linux/jiffies.h> 345cee9645SThomas Gleixner #include <linux/posix-timers.h> 355cee9645SThomas Gleixner #include <linux/cpu.h> 365cee9645SThomas Gleixner #include <linux/syscalls.h> 375cee9645SThomas Gleixner #include <linux/delay.h> 385cee9645SThomas Gleixner #include <linux/tick.h> 395cee9645SThomas Gleixner #include <linux/kallsyms.h> 405cee9645SThomas Gleixner #include <linux/irq_work.h> 415cee9645SThomas Gleixner #include <linux/sched.h> 425cee9645SThomas Gleixner #include <linux/sched/sysctl.h> 435cee9645SThomas Gleixner #include <linux/slab.h> 445cee9645SThomas Gleixner #include <linux/compat.h> 455cee9645SThomas Gleixner 465cee9645SThomas Gleixner #include <asm/uaccess.h> 475cee9645SThomas Gleixner #include <asm/unistd.h> 485cee9645SThomas Gleixner #include <asm/div64.h> 495cee9645SThomas Gleixner #include <asm/timex.h> 505cee9645SThomas Gleixner #include <asm/io.h> 515cee9645SThomas Gleixner 525cee9645SThomas Gleixner #define CREATE_TRACE_POINTS 535cee9645SThomas Gleixner #include <trace/events/timer.h> 545cee9645SThomas Gleixner 555cee9645SThomas Gleixner __visible u64 jiffies_64 __cacheline_aligned_in_smp = INITIAL_JIFFIES; 565cee9645SThomas Gleixner 575cee9645SThomas Gleixner EXPORT_SYMBOL(jiffies_64); 585cee9645SThomas Gleixner 595cee9645SThomas Gleixner /* 605cee9645SThomas Gleixner * per-CPU timer vector definitions: 615cee9645SThomas Gleixner */ 625cee9645SThomas Gleixner #define TVN_BITS (CONFIG_BASE_SMALL ? 4 : 6) 635cee9645SThomas Gleixner #define TVR_BITS (CONFIG_BASE_SMALL ? 6 : 8) 645cee9645SThomas Gleixner #define TVN_SIZE (1 << TVN_BITS) 655cee9645SThomas Gleixner #define TVR_SIZE (1 << TVR_BITS) 665cee9645SThomas Gleixner #define TVN_MASK (TVN_SIZE - 1) 675cee9645SThomas Gleixner #define TVR_MASK (TVR_SIZE - 1) 685cee9645SThomas Gleixner #define MAX_TVAL ((unsigned long)((1ULL << (TVR_BITS + 4*TVN_BITS)) - 1)) 695cee9645SThomas Gleixner 705cee9645SThomas Gleixner struct tvec { 715cee9645SThomas Gleixner struct list_head vec[TVN_SIZE]; 725cee9645SThomas Gleixner }; 735cee9645SThomas Gleixner 745cee9645SThomas Gleixner struct tvec_root { 755cee9645SThomas Gleixner struct list_head vec[TVR_SIZE]; 765cee9645SThomas Gleixner }; 775cee9645SThomas Gleixner 785cee9645SThomas Gleixner struct tvec_base { 795cee9645SThomas Gleixner spinlock_t lock; 805cee9645SThomas Gleixner struct timer_list *running_timer; 815cee9645SThomas Gleixner unsigned long timer_jiffies; 825cee9645SThomas Gleixner unsigned long next_timer; 835cee9645SThomas Gleixner unsigned long active_timers; 845cee9645SThomas Gleixner unsigned long all_timers; 85d6f93829SViresh Kumar int cpu; 865cee9645SThomas Gleixner struct tvec_root tv1; 875cee9645SThomas Gleixner struct tvec tv2; 885cee9645SThomas Gleixner struct tvec tv3; 895cee9645SThomas Gleixner struct tvec tv4; 905cee9645SThomas Gleixner struct tvec tv5; 915cee9645SThomas Gleixner } ____cacheline_aligned; 925cee9645SThomas Gleixner 935cee9645SThomas Gleixner struct tvec_base boot_tvec_bases; 945cee9645SThomas Gleixner EXPORT_SYMBOL(boot_tvec_bases); 955cee9645SThomas Gleixner static DEFINE_PER_CPU(struct tvec_base *, tvec_bases) = &boot_tvec_bases; 965cee9645SThomas Gleixner 975cee9645SThomas Gleixner /* Functions below help us manage 'deferrable' flag */ 985cee9645SThomas Gleixner static inline unsigned int tbase_get_deferrable(struct tvec_base *base) 995cee9645SThomas Gleixner { 1005cee9645SThomas Gleixner return ((unsigned int)(unsigned long)base & TIMER_DEFERRABLE); 1015cee9645SThomas Gleixner } 1025cee9645SThomas Gleixner 1035cee9645SThomas Gleixner static inline unsigned int tbase_get_irqsafe(struct tvec_base *base) 1045cee9645SThomas Gleixner { 1055cee9645SThomas Gleixner return ((unsigned int)(unsigned long)base & TIMER_IRQSAFE); 1065cee9645SThomas Gleixner } 1075cee9645SThomas Gleixner 1085cee9645SThomas Gleixner static inline struct tvec_base *tbase_get_base(struct tvec_base *base) 1095cee9645SThomas Gleixner { 1105cee9645SThomas Gleixner return ((struct tvec_base *)((unsigned long)base & ~TIMER_FLAG_MASK)); 1115cee9645SThomas Gleixner } 1125cee9645SThomas Gleixner 1135cee9645SThomas Gleixner static inline void 1145cee9645SThomas Gleixner timer_set_base(struct timer_list *timer, struct tvec_base *new_base) 1155cee9645SThomas Gleixner { 1165cee9645SThomas Gleixner unsigned long flags = (unsigned long)timer->base & TIMER_FLAG_MASK; 1175cee9645SThomas Gleixner 1185cee9645SThomas Gleixner timer->base = (struct tvec_base *)((unsigned long)(new_base) | flags); 1195cee9645SThomas Gleixner } 1205cee9645SThomas Gleixner 1215cee9645SThomas Gleixner static unsigned long round_jiffies_common(unsigned long j, int cpu, 1225cee9645SThomas Gleixner bool force_up) 1235cee9645SThomas Gleixner { 1245cee9645SThomas Gleixner int rem; 1255cee9645SThomas Gleixner unsigned long original = j; 1265cee9645SThomas Gleixner 1275cee9645SThomas Gleixner /* 1285cee9645SThomas Gleixner * We don't want all cpus firing their timers at once hitting the 1295cee9645SThomas Gleixner * same lock or cachelines, so we skew each extra cpu with an extra 1305cee9645SThomas Gleixner * 3 jiffies. This 3 jiffies came originally from the mm/ code which 1315cee9645SThomas Gleixner * already did this. 1325cee9645SThomas Gleixner * The skew is done by adding 3*cpunr, then round, then subtract this 1335cee9645SThomas Gleixner * extra offset again. 1345cee9645SThomas Gleixner */ 1355cee9645SThomas Gleixner j += cpu * 3; 1365cee9645SThomas Gleixner 1375cee9645SThomas Gleixner rem = j % HZ; 1385cee9645SThomas Gleixner 1395cee9645SThomas Gleixner /* 1405cee9645SThomas Gleixner * If the target jiffie is just after a whole second (which can happen 1415cee9645SThomas Gleixner * due to delays of the timer irq, long irq off times etc etc) then 1425cee9645SThomas Gleixner * we should round down to the whole second, not up. Use 1/4th second 1435cee9645SThomas Gleixner * as cutoff for this rounding as an extreme upper bound for this. 1445cee9645SThomas Gleixner * But never round down if @force_up is set. 1455cee9645SThomas Gleixner */ 1465cee9645SThomas Gleixner if (rem < HZ/4 && !force_up) /* round down */ 1475cee9645SThomas Gleixner j = j - rem; 1485cee9645SThomas Gleixner else /* round up */ 1495cee9645SThomas Gleixner j = j - rem + HZ; 1505cee9645SThomas Gleixner 1515cee9645SThomas Gleixner /* now that we have rounded, subtract the extra skew again */ 1525cee9645SThomas Gleixner j -= cpu * 3; 1535cee9645SThomas Gleixner 1545cee9645SThomas Gleixner /* 1555cee9645SThomas Gleixner * Make sure j is still in the future. Otherwise return the 1565cee9645SThomas Gleixner * unmodified value. 1575cee9645SThomas Gleixner */ 1585cee9645SThomas Gleixner return time_is_after_jiffies(j) ? j : original; 1595cee9645SThomas Gleixner } 1605cee9645SThomas Gleixner 1615cee9645SThomas Gleixner /** 1625cee9645SThomas Gleixner * __round_jiffies - function to round jiffies to a full second 1635cee9645SThomas Gleixner * @j: the time in (absolute) jiffies that should be rounded 1645cee9645SThomas Gleixner * @cpu: the processor number on which the timeout will happen 1655cee9645SThomas Gleixner * 1665cee9645SThomas Gleixner * __round_jiffies() rounds an absolute time in the future (in jiffies) 1675cee9645SThomas Gleixner * up or down to (approximately) full seconds. This is useful for timers 1685cee9645SThomas Gleixner * for which the exact time they fire does not matter too much, as long as 1695cee9645SThomas Gleixner * they fire approximately every X seconds. 1705cee9645SThomas Gleixner * 1715cee9645SThomas Gleixner * By rounding these timers to whole seconds, all such timers will fire 1725cee9645SThomas Gleixner * at the same time, rather than at various times spread out. The goal 1735cee9645SThomas Gleixner * of this is to have the CPU wake up less, which saves power. 1745cee9645SThomas Gleixner * 1755cee9645SThomas Gleixner * The exact rounding is skewed for each processor to avoid all 1765cee9645SThomas Gleixner * processors firing at the exact same time, which could lead 1775cee9645SThomas Gleixner * to lock contention or spurious cache line bouncing. 1785cee9645SThomas Gleixner * 1795cee9645SThomas Gleixner * The return value is the rounded version of the @j parameter. 1805cee9645SThomas Gleixner */ 1815cee9645SThomas Gleixner unsigned long __round_jiffies(unsigned long j, int cpu) 1825cee9645SThomas Gleixner { 1835cee9645SThomas Gleixner return round_jiffies_common(j, cpu, false); 1845cee9645SThomas Gleixner } 1855cee9645SThomas Gleixner EXPORT_SYMBOL_GPL(__round_jiffies); 1865cee9645SThomas Gleixner 1875cee9645SThomas Gleixner /** 1885cee9645SThomas Gleixner * __round_jiffies_relative - function to round jiffies to a full second 1895cee9645SThomas Gleixner * @j: the time in (relative) jiffies that should be rounded 1905cee9645SThomas Gleixner * @cpu: the processor number on which the timeout will happen 1915cee9645SThomas Gleixner * 1925cee9645SThomas Gleixner * __round_jiffies_relative() rounds a time delta in the future (in jiffies) 1935cee9645SThomas Gleixner * up or down to (approximately) full seconds. This is useful for timers 1945cee9645SThomas Gleixner * for which the exact time they fire does not matter too much, as long as 1955cee9645SThomas Gleixner * they fire approximately every X seconds. 1965cee9645SThomas Gleixner * 1975cee9645SThomas Gleixner * By rounding these timers to whole seconds, all such timers will fire 1985cee9645SThomas Gleixner * at the same time, rather than at various times spread out. The goal 1995cee9645SThomas Gleixner * of this is to have the CPU wake up less, which saves power. 2005cee9645SThomas Gleixner * 2015cee9645SThomas Gleixner * The exact rounding is skewed for each processor to avoid all 2025cee9645SThomas Gleixner * processors firing at the exact same time, which could lead 2035cee9645SThomas Gleixner * to lock contention or spurious cache line bouncing. 2045cee9645SThomas Gleixner * 2055cee9645SThomas Gleixner * The return value is the rounded version of the @j parameter. 2065cee9645SThomas Gleixner */ 2075cee9645SThomas Gleixner unsigned long __round_jiffies_relative(unsigned long j, int cpu) 2085cee9645SThomas Gleixner { 2095cee9645SThomas Gleixner unsigned long j0 = jiffies; 2105cee9645SThomas Gleixner 2115cee9645SThomas Gleixner /* Use j0 because jiffies might change while we run */ 2125cee9645SThomas Gleixner return round_jiffies_common(j + j0, cpu, false) - j0; 2135cee9645SThomas Gleixner } 2145cee9645SThomas Gleixner EXPORT_SYMBOL_GPL(__round_jiffies_relative); 2155cee9645SThomas Gleixner 2165cee9645SThomas Gleixner /** 2175cee9645SThomas Gleixner * round_jiffies - function to round jiffies to a full second 2185cee9645SThomas Gleixner * @j: the time in (absolute) jiffies that should be rounded 2195cee9645SThomas Gleixner * 2205cee9645SThomas Gleixner * round_jiffies() rounds an absolute time in the future (in jiffies) 2215cee9645SThomas Gleixner * up or down to (approximately) full seconds. This is useful for timers 2225cee9645SThomas Gleixner * for which the exact time they fire does not matter too much, as long as 2235cee9645SThomas Gleixner * they fire approximately every X seconds. 2245cee9645SThomas Gleixner * 2255cee9645SThomas Gleixner * By rounding these timers to whole seconds, all such timers will fire 2265cee9645SThomas Gleixner * at the same time, rather than at various times spread out. The goal 2275cee9645SThomas Gleixner * of this is to have the CPU wake up less, which saves power. 2285cee9645SThomas Gleixner * 2295cee9645SThomas Gleixner * The return value is the rounded version of the @j parameter. 2305cee9645SThomas Gleixner */ 2315cee9645SThomas Gleixner unsigned long round_jiffies(unsigned long j) 2325cee9645SThomas Gleixner { 2335cee9645SThomas Gleixner return round_jiffies_common(j, raw_smp_processor_id(), false); 2345cee9645SThomas Gleixner } 2355cee9645SThomas Gleixner EXPORT_SYMBOL_GPL(round_jiffies); 2365cee9645SThomas Gleixner 2375cee9645SThomas Gleixner /** 2385cee9645SThomas Gleixner * round_jiffies_relative - function to round jiffies to a full second 2395cee9645SThomas Gleixner * @j: the time in (relative) jiffies that should be rounded 2405cee9645SThomas Gleixner * 2415cee9645SThomas Gleixner * round_jiffies_relative() rounds a time delta in the future (in jiffies) 2425cee9645SThomas Gleixner * up or down to (approximately) full seconds. This is useful for timers 2435cee9645SThomas Gleixner * for which the exact time they fire does not matter too much, as long as 2445cee9645SThomas Gleixner * they fire approximately every X seconds. 2455cee9645SThomas Gleixner * 2465cee9645SThomas Gleixner * By rounding these timers to whole seconds, all such timers will fire 2475cee9645SThomas Gleixner * at the same time, rather than at various times spread out. The goal 2485cee9645SThomas Gleixner * of this is to have the CPU wake up less, which saves power. 2495cee9645SThomas Gleixner * 2505cee9645SThomas Gleixner * The return value is the rounded version of the @j parameter. 2515cee9645SThomas Gleixner */ 2525cee9645SThomas Gleixner unsigned long round_jiffies_relative(unsigned long j) 2535cee9645SThomas Gleixner { 2545cee9645SThomas Gleixner return __round_jiffies_relative(j, raw_smp_processor_id()); 2555cee9645SThomas Gleixner } 2565cee9645SThomas Gleixner EXPORT_SYMBOL_GPL(round_jiffies_relative); 2575cee9645SThomas Gleixner 2585cee9645SThomas Gleixner /** 2595cee9645SThomas Gleixner * __round_jiffies_up - function to round jiffies up to a full second 2605cee9645SThomas Gleixner * @j: the time in (absolute) jiffies that should be rounded 2615cee9645SThomas Gleixner * @cpu: the processor number on which the timeout will happen 2625cee9645SThomas Gleixner * 2635cee9645SThomas Gleixner * This is the same as __round_jiffies() except that it will never 2645cee9645SThomas Gleixner * round down. This is useful for timeouts for which the exact time 2655cee9645SThomas Gleixner * of firing does not matter too much, as long as they don't fire too 2665cee9645SThomas Gleixner * early. 2675cee9645SThomas Gleixner */ 2685cee9645SThomas Gleixner unsigned long __round_jiffies_up(unsigned long j, int cpu) 2695cee9645SThomas Gleixner { 2705cee9645SThomas Gleixner return round_jiffies_common(j, cpu, true); 2715cee9645SThomas Gleixner } 2725cee9645SThomas Gleixner EXPORT_SYMBOL_GPL(__round_jiffies_up); 2735cee9645SThomas Gleixner 2745cee9645SThomas Gleixner /** 2755cee9645SThomas Gleixner * __round_jiffies_up_relative - function to round jiffies up to a full second 2765cee9645SThomas Gleixner * @j: the time in (relative) jiffies that should be rounded 2775cee9645SThomas Gleixner * @cpu: the processor number on which the timeout will happen 2785cee9645SThomas Gleixner * 2795cee9645SThomas Gleixner * This is the same as __round_jiffies_relative() except that it will never 2805cee9645SThomas Gleixner * round down. This is useful for timeouts for which the exact time 2815cee9645SThomas Gleixner * of firing does not matter too much, as long as they don't fire too 2825cee9645SThomas Gleixner * early. 2835cee9645SThomas Gleixner */ 2845cee9645SThomas Gleixner unsigned long __round_jiffies_up_relative(unsigned long j, int cpu) 2855cee9645SThomas Gleixner { 2865cee9645SThomas Gleixner unsigned long j0 = jiffies; 2875cee9645SThomas Gleixner 2885cee9645SThomas Gleixner /* Use j0 because jiffies might change while we run */ 2895cee9645SThomas Gleixner return round_jiffies_common(j + j0, cpu, true) - j0; 2905cee9645SThomas Gleixner } 2915cee9645SThomas Gleixner EXPORT_SYMBOL_GPL(__round_jiffies_up_relative); 2925cee9645SThomas Gleixner 2935cee9645SThomas Gleixner /** 2945cee9645SThomas Gleixner * round_jiffies_up - function to round jiffies up to a full second 2955cee9645SThomas Gleixner * @j: the time in (absolute) jiffies that should be rounded 2965cee9645SThomas Gleixner * 2975cee9645SThomas Gleixner * This is the same as round_jiffies() except that it will never 2985cee9645SThomas Gleixner * round down. This is useful for timeouts for which the exact time 2995cee9645SThomas Gleixner * of firing does not matter too much, as long as they don't fire too 3005cee9645SThomas Gleixner * early. 3015cee9645SThomas Gleixner */ 3025cee9645SThomas Gleixner unsigned long round_jiffies_up(unsigned long j) 3035cee9645SThomas Gleixner { 3045cee9645SThomas Gleixner return round_jiffies_common(j, raw_smp_processor_id(), true); 3055cee9645SThomas Gleixner } 3065cee9645SThomas Gleixner EXPORT_SYMBOL_GPL(round_jiffies_up); 3075cee9645SThomas Gleixner 3085cee9645SThomas Gleixner /** 3095cee9645SThomas Gleixner * round_jiffies_up_relative - function to round jiffies up to a full second 3105cee9645SThomas Gleixner * @j: the time in (relative) jiffies that should be rounded 3115cee9645SThomas Gleixner * 3125cee9645SThomas Gleixner * This is the same as round_jiffies_relative() except that it will never 3135cee9645SThomas Gleixner * round down. This is useful for timeouts for which the exact time 3145cee9645SThomas Gleixner * of firing does not matter too much, as long as they don't fire too 3155cee9645SThomas Gleixner * early. 3165cee9645SThomas Gleixner */ 3175cee9645SThomas Gleixner unsigned long round_jiffies_up_relative(unsigned long j) 3185cee9645SThomas Gleixner { 3195cee9645SThomas Gleixner return __round_jiffies_up_relative(j, raw_smp_processor_id()); 3205cee9645SThomas Gleixner } 3215cee9645SThomas Gleixner EXPORT_SYMBOL_GPL(round_jiffies_up_relative); 3225cee9645SThomas Gleixner 3235cee9645SThomas Gleixner /** 3245cee9645SThomas Gleixner * set_timer_slack - set the allowed slack for a timer 3255cee9645SThomas Gleixner * @timer: the timer to be modified 3265cee9645SThomas Gleixner * @slack_hz: the amount of time (in jiffies) allowed for rounding 3275cee9645SThomas Gleixner * 3285cee9645SThomas Gleixner * Set the amount of time, in jiffies, that a certain timer has 3295cee9645SThomas Gleixner * in terms of slack. By setting this value, the timer subsystem 3305cee9645SThomas Gleixner * will schedule the actual timer somewhere between 3315cee9645SThomas Gleixner * the time mod_timer() asks for, and that time plus the slack. 3325cee9645SThomas Gleixner * 3335cee9645SThomas Gleixner * By setting the slack to -1, a percentage of the delay is used 3345cee9645SThomas Gleixner * instead. 3355cee9645SThomas Gleixner */ 3365cee9645SThomas Gleixner void set_timer_slack(struct timer_list *timer, int slack_hz) 3375cee9645SThomas Gleixner { 3385cee9645SThomas Gleixner timer->slack = slack_hz; 3395cee9645SThomas Gleixner } 3405cee9645SThomas Gleixner EXPORT_SYMBOL_GPL(set_timer_slack); 3415cee9645SThomas Gleixner 3425cee9645SThomas Gleixner /* 3435cee9645SThomas Gleixner * If the list is empty, catch up ->timer_jiffies to the current time. 3445cee9645SThomas Gleixner * The caller must hold the tvec_base lock. Returns true if the list 3455cee9645SThomas Gleixner * was empty and therefore ->timer_jiffies was updated. 3465cee9645SThomas Gleixner */ 3475cee9645SThomas Gleixner static bool catchup_timer_jiffies(struct tvec_base *base) 3485cee9645SThomas Gleixner { 3495cee9645SThomas Gleixner if (!base->all_timers) { 3505cee9645SThomas Gleixner base->timer_jiffies = jiffies; 3515cee9645SThomas Gleixner return true; 3525cee9645SThomas Gleixner } 3535cee9645SThomas Gleixner return false; 3545cee9645SThomas Gleixner } 3555cee9645SThomas Gleixner 3565cee9645SThomas Gleixner static void 3575cee9645SThomas Gleixner __internal_add_timer(struct tvec_base *base, struct timer_list *timer) 3585cee9645SThomas Gleixner { 3595cee9645SThomas Gleixner unsigned long expires = timer->expires; 3605cee9645SThomas Gleixner unsigned long idx = expires - base->timer_jiffies; 3615cee9645SThomas Gleixner struct list_head *vec; 3625cee9645SThomas Gleixner 3635cee9645SThomas Gleixner if (idx < TVR_SIZE) { 3645cee9645SThomas Gleixner int i = expires & TVR_MASK; 3655cee9645SThomas Gleixner vec = base->tv1.vec + i; 3665cee9645SThomas Gleixner } else if (idx < 1 << (TVR_BITS + TVN_BITS)) { 3675cee9645SThomas Gleixner int i = (expires >> TVR_BITS) & TVN_MASK; 3685cee9645SThomas Gleixner vec = base->tv2.vec + i; 3695cee9645SThomas Gleixner } else if (idx < 1 << (TVR_BITS + 2 * TVN_BITS)) { 3705cee9645SThomas Gleixner int i = (expires >> (TVR_BITS + TVN_BITS)) & TVN_MASK; 3715cee9645SThomas Gleixner vec = base->tv3.vec + i; 3725cee9645SThomas Gleixner } else if (idx < 1 << (TVR_BITS + 3 * TVN_BITS)) { 3735cee9645SThomas Gleixner int i = (expires >> (TVR_BITS + 2 * TVN_BITS)) & TVN_MASK; 3745cee9645SThomas Gleixner vec = base->tv4.vec + i; 3755cee9645SThomas Gleixner } else if ((signed long) idx < 0) { 3765cee9645SThomas Gleixner /* 3775cee9645SThomas Gleixner * Can happen if you add a timer with expires == jiffies, 3785cee9645SThomas Gleixner * or you set a timer to go off in the past 3795cee9645SThomas Gleixner */ 3805cee9645SThomas Gleixner vec = base->tv1.vec + (base->timer_jiffies & TVR_MASK); 3815cee9645SThomas Gleixner } else { 3825cee9645SThomas Gleixner int i; 3835cee9645SThomas Gleixner /* If the timeout is larger than MAX_TVAL (on 64-bit 3845cee9645SThomas Gleixner * architectures or with CONFIG_BASE_SMALL=1) then we 3855cee9645SThomas Gleixner * use the maximum timeout. 3865cee9645SThomas Gleixner */ 3875cee9645SThomas Gleixner if (idx > MAX_TVAL) { 3885cee9645SThomas Gleixner idx = MAX_TVAL; 3895cee9645SThomas Gleixner expires = idx + base->timer_jiffies; 3905cee9645SThomas Gleixner } 3915cee9645SThomas Gleixner i = (expires >> (TVR_BITS + 3 * TVN_BITS)) & TVN_MASK; 3925cee9645SThomas Gleixner vec = base->tv5.vec + i; 3935cee9645SThomas Gleixner } 3945cee9645SThomas Gleixner /* 3955cee9645SThomas Gleixner * Timers are FIFO: 3965cee9645SThomas Gleixner */ 3975cee9645SThomas Gleixner list_add_tail(&timer->entry, vec); 3985cee9645SThomas Gleixner } 3995cee9645SThomas Gleixner 4005cee9645SThomas Gleixner static void internal_add_timer(struct tvec_base *base, struct timer_list *timer) 4015cee9645SThomas Gleixner { 4025cee9645SThomas Gleixner (void)catchup_timer_jiffies(base); 4035cee9645SThomas Gleixner __internal_add_timer(base, timer); 4045cee9645SThomas Gleixner /* 4055cee9645SThomas Gleixner * Update base->active_timers and base->next_timer 4065cee9645SThomas Gleixner */ 4075cee9645SThomas Gleixner if (!tbase_get_deferrable(timer->base)) { 4085cee9645SThomas Gleixner if (!base->active_timers++ || 4095cee9645SThomas Gleixner time_before(timer->expires, base->next_timer)) 4105cee9645SThomas Gleixner base->next_timer = timer->expires; 4115cee9645SThomas Gleixner } 4125cee9645SThomas Gleixner base->all_timers++; 4139f6d9baaSViresh Kumar 4149f6d9baaSViresh Kumar /* 4159f6d9baaSViresh Kumar * Check whether the other CPU is in dynticks mode and needs 4169f6d9baaSViresh Kumar * to be triggered to reevaluate the timer wheel. 4179f6d9baaSViresh Kumar * We are protected against the other CPU fiddling 4189f6d9baaSViresh Kumar * with the timer by holding the timer base lock. This also 4199f6d9baaSViresh Kumar * makes sure that a CPU on the way to stop its tick can not 4209f6d9baaSViresh Kumar * evaluate the timer wheel. 4219f6d9baaSViresh Kumar * 4229f6d9baaSViresh Kumar * Spare the IPI for deferrable timers on idle targets though. 4239f6d9baaSViresh Kumar * The next busy ticks will take care of it. Except full dynticks 4249f6d9baaSViresh Kumar * require special care against races with idle_cpu(), lets deal 4259f6d9baaSViresh Kumar * with that later. 4269f6d9baaSViresh Kumar */ 4279f6d9baaSViresh Kumar if (!tbase_get_deferrable(base) || tick_nohz_full_cpu(base->cpu)) 4289f6d9baaSViresh Kumar wake_up_nohz_cpu(base->cpu); 4295cee9645SThomas Gleixner } 4305cee9645SThomas Gleixner 4315cee9645SThomas Gleixner #ifdef CONFIG_TIMER_STATS 4325cee9645SThomas Gleixner void __timer_stats_timer_set_start_info(struct timer_list *timer, void *addr) 4335cee9645SThomas Gleixner { 4345cee9645SThomas Gleixner if (timer->start_site) 4355cee9645SThomas Gleixner return; 4365cee9645SThomas Gleixner 4375cee9645SThomas Gleixner timer->start_site = addr; 4385cee9645SThomas Gleixner memcpy(timer->start_comm, current->comm, TASK_COMM_LEN); 4395cee9645SThomas Gleixner timer->start_pid = current->pid; 4405cee9645SThomas Gleixner } 4415cee9645SThomas Gleixner 4425cee9645SThomas Gleixner static void timer_stats_account_timer(struct timer_list *timer) 4435cee9645SThomas Gleixner { 4445cee9645SThomas Gleixner unsigned int flag = 0; 4455cee9645SThomas Gleixner 4465cee9645SThomas Gleixner if (likely(!timer->start_site)) 4475cee9645SThomas Gleixner return; 4485cee9645SThomas Gleixner if (unlikely(tbase_get_deferrable(timer->base))) 4495cee9645SThomas Gleixner flag |= TIMER_STATS_FLAG_DEFERRABLE; 4505cee9645SThomas Gleixner 4515cee9645SThomas Gleixner timer_stats_update_stats(timer, timer->start_pid, timer->start_site, 4525cee9645SThomas Gleixner timer->function, timer->start_comm, flag); 4535cee9645SThomas Gleixner } 4545cee9645SThomas Gleixner 4555cee9645SThomas Gleixner #else 4565cee9645SThomas Gleixner static void timer_stats_account_timer(struct timer_list *timer) {} 4575cee9645SThomas Gleixner #endif 4585cee9645SThomas Gleixner 4595cee9645SThomas Gleixner #ifdef CONFIG_DEBUG_OBJECTS_TIMERS 4605cee9645SThomas Gleixner 4615cee9645SThomas Gleixner static struct debug_obj_descr timer_debug_descr; 4625cee9645SThomas Gleixner 4635cee9645SThomas Gleixner static void *timer_debug_hint(void *addr) 4645cee9645SThomas Gleixner { 4655cee9645SThomas Gleixner return ((struct timer_list *) addr)->function; 4665cee9645SThomas Gleixner } 4675cee9645SThomas Gleixner 4685cee9645SThomas Gleixner /* 4695cee9645SThomas Gleixner * fixup_init is called when: 4705cee9645SThomas Gleixner * - an active object is initialized 4715cee9645SThomas Gleixner */ 4725cee9645SThomas Gleixner static int timer_fixup_init(void *addr, enum debug_obj_state state) 4735cee9645SThomas Gleixner { 4745cee9645SThomas Gleixner struct timer_list *timer = addr; 4755cee9645SThomas Gleixner 4765cee9645SThomas Gleixner switch (state) { 4775cee9645SThomas Gleixner case ODEBUG_STATE_ACTIVE: 4785cee9645SThomas Gleixner del_timer_sync(timer); 4795cee9645SThomas Gleixner debug_object_init(timer, &timer_debug_descr); 4805cee9645SThomas Gleixner return 1; 4815cee9645SThomas Gleixner default: 4825cee9645SThomas Gleixner return 0; 4835cee9645SThomas Gleixner } 4845cee9645SThomas Gleixner } 4855cee9645SThomas Gleixner 4865cee9645SThomas Gleixner /* Stub timer callback for improperly used timers. */ 4875cee9645SThomas Gleixner static void stub_timer(unsigned long data) 4885cee9645SThomas Gleixner { 4895cee9645SThomas Gleixner WARN_ON(1); 4905cee9645SThomas Gleixner } 4915cee9645SThomas Gleixner 4925cee9645SThomas Gleixner /* 4935cee9645SThomas Gleixner * fixup_activate is called when: 4945cee9645SThomas Gleixner * - an active object is activated 4955cee9645SThomas Gleixner * - an unknown object is activated (might be a statically initialized object) 4965cee9645SThomas Gleixner */ 4975cee9645SThomas Gleixner static int timer_fixup_activate(void *addr, enum debug_obj_state state) 4985cee9645SThomas Gleixner { 4995cee9645SThomas Gleixner struct timer_list *timer = addr; 5005cee9645SThomas Gleixner 5015cee9645SThomas Gleixner switch (state) { 5025cee9645SThomas Gleixner 5035cee9645SThomas Gleixner case ODEBUG_STATE_NOTAVAILABLE: 5045cee9645SThomas Gleixner /* 5055cee9645SThomas Gleixner * This is not really a fixup. The timer was 5065cee9645SThomas Gleixner * statically initialized. We just make sure that it 5075cee9645SThomas Gleixner * is tracked in the object tracker. 5085cee9645SThomas Gleixner */ 5095cee9645SThomas Gleixner if (timer->entry.next == NULL && 5105cee9645SThomas Gleixner timer->entry.prev == TIMER_ENTRY_STATIC) { 5115cee9645SThomas Gleixner debug_object_init(timer, &timer_debug_descr); 5125cee9645SThomas Gleixner debug_object_activate(timer, &timer_debug_descr); 5135cee9645SThomas Gleixner return 0; 5145cee9645SThomas Gleixner } else { 5155cee9645SThomas Gleixner setup_timer(timer, stub_timer, 0); 5165cee9645SThomas Gleixner return 1; 5175cee9645SThomas Gleixner } 5185cee9645SThomas Gleixner return 0; 5195cee9645SThomas Gleixner 5205cee9645SThomas Gleixner case ODEBUG_STATE_ACTIVE: 5215cee9645SThomas Gleixner WARN_ON(1); 5225cee9645SThomas Gleixner 5235cee9645SThomas Gleixner default: 5245cee9645SThomas Gleixner return 0; 5255cee9645SThomas Gleixner } 5265cee9645SThomas Gleixner } 5275cee9645SThomas Gleixner 5285cee9645SThomas Gleixner /* 5295cee9645SThomas Gleixner * fixup_free is called when: 5305cee9645SThomas Gleixner * - an active object is freed 5315cee9645SThomas Gleixner */ 5325cee9645SThomas Gleixner static int timer_fixup_free(void *addr, enum debug_obj_state state) 5335cee9645SThomas Gleixner { 5345cee9645SThomas Gleixner struct timer_list *timer = addr; 5355cee9645SThomas Gleixner 5365cee9645SThomas Gleixner switch (state) { 5375cee9645SThomas Gleixner case ODEBUG_STATE_ACTIVE: 5385cee9645SThomas Gleixner del_timer_sync(timer); 5395cee9645SThomas Gleixner debug_object_free(timer, &timer_debug_descr); 5405cee9645SThomas Gleixner return 1; 5415cee9645SThomas Gleixner default: 5425cee9645SThomas Gleixner return 0; 5435cee9645SThomas Gleixner } 5445cee9645SThomas Gleixner } 5455cee9645SThomas Gleixner 5465cee9645SThomas Gleixner /* 5475cee9645SThomas Gleixner * fixup_assert_init is called when: 5485cee9645SThomas Gleixner * - an untracked/uninit-ed object is found 5495cee9645SThomas Gleixner */ 5505cee9645SThomas Gleixner static int timer_fixup_assert_init(void *addr, enum debug_obj_state state) 5515cee9645SThomas Gleixner { 5525cee9645SThomas Gleixner struct timer_list *timer = addr; 5535cee9645SThomas Gleixner 5545cee9645SThomas Gleixner switch (state) { 5555cee9645SThomas Gleixner case ODEBUG_STATE_NOTAVAILABLE: 5565cee9645SThomas Gleixner if (timer->entry.prev == TIMER_ENTRY_STATIC) { 5575cee9645SThomas Gleixner /* 5585cee9645SThomas Gleixner * This is not really a fixup. The timer was 5595cee9645SThomas Gleixner * statically initialized. We just make sure that it 5605cee9645SThomas Gleixner * is tracked in the object tracker. 5615cee9645SThomas Gleixner */ 5625cee9645SThomas Gleixner debug_object_init(timer, &timer_debug_descr); 5635cee9645SThomas Gleixner return 0; 5645cee9645SThomas Gleixner } else { 5655cee9645SThomas Gleixner setup_timer(timer, stub_timer, 0); 5665cee9645SThomas Gleixner return 1; 5675cee9645SThomas Gleixner } 5685cee9645SThomas Gleixner default: 5695cee9645SThomas Gleixner return 0; 5705cee9645SThomas Gleixner } 5715cee9645SThomas Gleixner } 5725cee9645SThomas Gleixner 5735cee9645SThomas Gleixner static struct debug_obj_descr timer_debug_descr = { 5745cee9645SThomas Gleixner .name = "timer_list", 5755cee9645SThomas Gleixner .debug_hint = timer_debug_hint, 5765cee9645SThomas Gleixner .fixup_init = timer_fixup_init, 5775cee9645SThomas Gleixner .fixup_activate = timer_fixup_activate, 5785cee9645SThomas Gleixner .fixup_free = timer_fixup_free, 5795cee9645SThomas Gleixner .fixup_assert_init = timer_fixup_assert_init, 5805cee9645SThomas Gleixner }; 5815cee9645SThomas Gleixner 5825cee9645SThomas Gleixner static inline void debug_timer_init(struct timer_list *timer) 5835cee9645SThomas Gleixner { 5845cee9645SThomas Gleixner debug_object_init(timer, &timer_debug_descr); 5855cee9645SThomas Gleixner } 5865cee9645SThomas Gleixner 5875cee9645SThomas Gleixner static inline void debug_timer_activate(struct timer_list *timer) 5885cee9645SThomas Gleixner { 5895cee9645SThomas Gleixner debug_object_activate(timer, &timer_debug_descr); 5905cee9645SThomas Gleixner } 5915cee9645SThomas Gleixner 5925cee9645SThomas Gleixner static inline void debug_timer_deactivate(struct timer_list *timer) 5935cee9645SThomas Gleixner { 5945cee9645SThomas Gleixner debug_object_deactivate(timer, &timer_debug_descr); 5955cee9645SThomas Gleixner } 5965cee9645SThomas Gleixner 5975cee9645SThomas Gleixner static inline void debug_timer_free(struct timer_list *timer) 5985cee9645SThomas Gleixner { 5995cee9645SThomas Gleixner debug_object_free(timer, &timer_debug_descr); 6005cee9645SThomas Gleixner } 6015cee9645SThomas Gleixner 6025cee9645SThomas Gleixner static inline void debug_timer_assert_init(struct timer_list *timer) 6035cee9645SThomas Gleixner { 6045cee9645SThomas Gleixner debug_object_assert_init(timer, &timer_debug_descr); 6055cee9645SThomas Gleixner } 6065cee9645SThomas Gleixner 6075cee9645SThomas Gleixner static void do_init_timer(struct timer_list *timer, unsigned int flags, 6085cee9645SThomas Gleixner const char *name, struct lock_class_key *key); 6095cee9645SThomas Gleixner 6105cee9645SThomas Gleixner void init_timer_on_stack_key(struct timer_list *timer, unsigned int flags, 6115cee9645SThomas Gleixner const char *name, struct lock_class_key *key) 6125cee9645SThomas Gleixner { 6135cee9645SThomas Gleixner debug_object_init_on_stack(timer, &timer_debug_descr); 6145cee9645SThomas Gleixner do_init_timer(timer, flags, name, key); 6155cee9645SThomas Gleixner } 6165cee9645SThomas Gleixner EXPORT_SYMBOL_GPL(init_timer_on_stack_key); 6175cee9645SThomas Gleixner 6185cee9645SThomas Gleixner void destroy_timer_on_stack(struct timer_list *timer) 6195cee9645SThomas Gleixner { 6205cee9645SThomas Gleixner debug_object_free(timer, &timer_debug_descr); 6215cee9645SThomas Gleixner } 6225cee9645SThomas Gleixner EXPORT_SYMBOL_GPL(destroy_timer_on_stack); 6235cee9645SThomas Gleixner 6245cee9645SThomas Gleixner #else 6255cee9645SThomas Gleixner static inline void debug_timer_init(struct timer_list *timer) { } 6265cee9645SThomas Gleixner static inline void debug_timer_activate(struct timer_list *timer) { } 6275cee9645SThomas Gleixner static inline void debug_timer_deactivate(struct timer_list *timer) { } 6285cee9645SThomas Gleixner static inline void debug_timer_assert_init(struct timer_list *timer) { } 6295cee9645SThomas Gleixner #endif 6305cee9645SThomas Gleixner 6315cee9645SThomas Gleixner static inline void debug_init(struct timer_list *timer) 6325cee9645SThomas Gleixner { 6335cee9645SThomas Gleixner debug_timer_init(timer); 6345cee9645SThomas Gleixner trace_timer_init(timer); 6355cee9645SThomas Gleixner } 6365cee9645SThomas Gleixner 6375cee9645SThomas Gleixner static inline void 6385cee9645SThomas Gleixner debug_activate(struct timer_list *timer, unsigned long expires) 6395cee9645SThomas Gleixner { 6405cee9645SThomas Gleixner debug_timer_activate(timer); 6415cee9645SThomas Gleixner trace_timer_start(timer, expires); 6425cee9645SThomas Gleixner } 6435cee9645SThomas Gleixner 6445cee9645SThomas Gleixner static inline void debug_deactivate(struct timer_list *timer) 6455cee9645SThomas Gleixner { 6465cee9645SThomas Gleixner debug_timer_deactivate(timer); 6475cee9645SThomas Gleixner trace_timer_cancel(timer); 6485cee9645SThomas Gleixner } 6495cee9645SThomas Gleixner 6505cee9645SThomas Gleixner static inline void debug_assert_init(struct timer_list *timer) 6515cee9645SThomas Gleixner { 6525cee9645SThomas Gleixner debug_timer_assert_init(timer); 6535cee9645SThomas Gleixner } 6545cee9645SThomas Gleixner 6555cee9645SThomas Gleixner static void do_init_timer(struct timer_list *timer, unsigned int flags, 6565cee9645SThomas Gleixner const char *name, struct lock_class_key *key) 6575cee9645SThomas Gleixner { 658*22127e93SChristoph Lameter struct tvec_base *base = raw_cpu_read(tvec_bases); 6595cee9645SThomas Gleixner 6605cee9645SThomas Gleixner timer->entry.next = NULL; 6615cee9645SThomas Gleixner timer->base = (void *)((unsigned long)base | flags); 6625cee9645SThomas Gleixner timer->slack = -1; 6635cee9645SThomas Gleixner #ifdef CONFIG_TIMER_STATS 6645cee9645SThomas Gleixner timer->start_site = NULL; 6655cee9645SThomas Gleixner timer->start_pid = -1; 6665cee9645SThomas Gleixner memset(timer->start_comm, 0, TASK_COMM_LEN); 6675cee9645SThomas Gleixner #endif 6685cee9645SThomas Gleixner lockdep_init_map(&timer->lockdep_map, name, key, 0); 6695cee9645SThomas Gleixner } 6705cee9645SThomas Gleixner 6715cee9645SThomas Gleixner /** 6725cee9645SThomas Gleixner * init_timer_key - initialize a timer 6735cee9645SThomas Gleixner * @timer: the timer to be initialized 6745cee9645SThomas Gleixner * @flags: timer flags 6755cee9645SThomas Gleixner * @name: name of the timer 6765cee9645SThomas Gleixner * @key: lockdep class key of the fake lock used for tracking timer 6775cee9645SThomas Gleixner * sync lock dependencies 6785cee9645SThomas Gleixner * 6795cee9645SThomas Gleixner * init_timer_key() must be done to a timer prior calling *any* of the 6805cee9645SThomas Gleixner * other timer functions. 6815cee9645SThomas Gleixner */ 6825cee9645SThomas Gleixner void init_timer_key(struct timer_list *timer, unsigned int flags, 6835cee9645SThomas Gleixner const char *name, struct lock_class_key *key) 6845cee9645SThomas Gleixner { 6855cee9645SThomas Gleixner debug_init(timer); 6865cee9645SThomas Gleixner do_init_timer(timer, flags, name, key); 6875cee9645SThomas Gleixner } 6885cee9645SThomas Gleixner EXPORT_SYMBOL(init_timer_key); 6895cee9645SThomas Gleixner 6905cee9645SThomas Gleixner static inline void detach_timer(struct timer_list *timer, bool clear_pending) 6915cee9645SThomas Gleixner { 6925cee9645SThomas Gleixner struct list_head *entry = &timer->entry; 6935cee9645SThomas Gleixner 6945cee9645SThomas Gleixner debug_deactivate(timer); 6955cee9645SThomas Gleixner 6965cee9645SThomas Gleixner __list_del(entry->prev, entry->next); 6975cee9645SThomas Gleixner if (clear_pending) 6985cee9645SThomas Gleixner entry->next = NULL; 6995cee9645SThomas Gleixner entry->prev = LIST_POISON2; 7005cee9645SThomas Gleixner } 7015cee9645SThomas Gleixner 7025cee9645SThomas Gleixner static inline void 7035cee9645SThomas Gleixner detach_expired_timer(struct timer_list *timer, struct tvec_base *base) 7045cee9645SThomas Gleixner { 7055cee9645SThomas Gleixner detach_timer(timer, true); 7065cee9645SThomas Gleixner if (!tbase_get_deferrable(timer->base)) 7075cee9645SThomas Gleixner base->active_timers--; 7085cee9645SThomas Gleixner base->all_timers--; 7095cee9645SThomas Gleixner (void)catchup_timer_jiffies(base); 7105cee9645SThomas Gleixner } 7115cee9645SThomas Gleixner 7125cee9645SThomas Gleixner static int detach_if_pending(struct timer_list *timer, struct tvec_base *base, 7135cee9645SThomas Gleixner bool clear_pending) 7145cee9645SThomas Gleixner { 7155cee9645SThomas Gleixner if (!timer_pending(timer)) 7165cee9645SThomas Gleixner return 0; 7175cee9645SThomas Gleixner 7185cee9645SThomas Gleixner detach_timer(timer, clear_pending); 7195cee9645SThomas Gleixner if (!tbase_get_deferrable(timer->base)) { 7205cee9645SThomas Gleixner base->active_timers--; 7215cee9645SThomas Gleixner if (timer->expires == base->next_timer) 7225cee9645SThomas Gleixner base->next_timer = base->timer_jiffies; 7235cee9645SThomas Gleixner } 7245cee9645SThomas Gleixner base->all_timers--; 7255cee9645SThomas Gleixner (void)catchup_timer_jiffies(base); 7265cee9645SThomas Gleixner return 1; 7275cee9645SThomas Gleixner } 7285cee9645SThomas Gleixner 7295cee9645SThomas Gleixner /* 7305cee9645SThomas Gleixner * We are using hashed locking: holding per_cpu(tvec_bases).lock 7315cee9645SThomas Gleixner * means that all timers which are tied to this base via timer->base are 7325cee9645SThomas Gleixner * locked, and the base itself is locked too. 7335cee9645SThomas Gleixner * 7345cee9645SThomas Gleixner * So __run_timers/migrate_timers can safely modify all timers which could 7355cee9645SThomas Gleixner * be found on ->tvX lists. 7365cee9645SThomas Gleixner * 7375cee9645SThomas Gleixner * When the timer's base is locked, and the timer removed from list, it is 7385cee9645SThomas Gleixner * possible to set timer->base = NULL and drop the lock: the timer remains 7395cee9645SThomas Gleixner * locked. 7405cee9645SThomas Gleixner */ 7415cee9645SThomas Gleixner static struct tvec_base *lock_timer_base(struct timer_list *timer, 7425cee9645SThomas Gleixner unsigned long *flags) 7435cee9645SThomas Gleixner __acquires(timer->base->lock) 7445cee9645SThomas Gleixner { 7455cee9645SThomas Gleixner struct tvec_base *base; 7465cee9645SThomas Gleixner 7475cee9645SThomas Gleixner for (;;) { 7485cee9645SThomas Gleixner struct tvec_base *prelock_base = timer->base; 7495cee9645SThomas Gleixner base = tbase_get_base(prelock_base); 7505cee9645SThomas Gleixner if (likely(base != NULL)) { 7515cee9645SThomas Gleixner spin_lock_irqsave(&base->lock, *flags); 7525cee9645SThomas Gleixner if (likely(prelock_base == timer->base)) 7535cee9645SThomas Gleixner return base; 7545cee9645SThomas Gleixner /* The timer has migrated to another CPU */ 7555cee9645SThomas Gleixner spin_unlock_irqrestore(&base->lock, *flags); 7565cee9645SThomas Gleixner } 7575cee9645SThomas Gleixner cpu_relax(); 7585cee9645SThomas Gleixner } 7595cee9645SThomas Gleixner } 7605cee9645SThomas Gleixner 7615cee9645SThomas Gleixner static inline int 7625cee9645SThomas Gleixner __mod_timer(struct timer_list *timer, unsigned long expires, 7635cee9645SThomas Gleixner bool pending_only, int pinned) 7645cee9645SThomas Gleixner { 7655cee9645SThomas Gleixner struct tvec_base *base, *new_base; 7665cee9645SThomas Gleixner unsigned long flags; 7675cee9645SThomas Gleixner int ret = 0 , cpu; 7685cee9645SThomas Gleixner 7695cee9645SThomas Gleixner timer_stats_timer_set_start_info(timer); 7705cee9645SThomas Gleixner BUG_ON(!timer->function); 7715cee9645SThomas Gleixner 7725cee9645SThomas Gleixner base = lock_timer_base(timer, &flags); 7735cee9645SThomas Gleixner 7745cee9645SThomas Gleixner ret = detach_if_pending(timer, base, false); 7755cee9645SThomas Gleixner if (!ret && pending_only) 7765cee9645SThomas Gleixner goto out_unlock; 7775cee9645SThomas Gleixner 7785cee9645SThomas Gleixner debug_activate(timer, expires); 7795cee9645SThomas Gleixner 7805cee9645SThomas Gleixner cpu = get_nohz_timer_target(pinned); 7815cee9645SThomas Gleixner new_base = per_cpu(tvec_bases, cpu); 7825cee9645SThomas Gleixner 7835cee9645SThomas Gleixner if (base != new_base) { 7845cee9645SThomas Gleixner /* 7855cee9645SThomas Gleixner * We are trying to schedule the timer on the local CPU. 7865cee9645SThomas Gleixner * However we can't change timer's base while it is running, 7875cee9645SThomas Gleixner * otherwise del_timer_sync() can't detect that the timer's 7885cee9645SThomas Gleixner * handler yet has not finished. This also guarantees that 7895cee9645SThomas Gleixner * the timer is serialized wrt itself. 7905cee9645SThomas Gleixner */ 7915cee9645SThomas Gleixner if (likely(base->running_timer != timer)) { 7925cee9645SThomas Gleixner /* See the comment in lock_timer_base() */ 7935cee9645SThomas Gleixner timer_set_base(timer, NULL); 7945cee9645SThomas Gleixner spin_unlock(&base->lock); 7955cee9645SThomas Gleixner base = new_base; 7965cee9645SThomas Gleixner spin_lock(&base->lock); 7975cee9645SThomas Gleixner timer_set_base(timer, base); 7985cee9645SThomas Gleixner } 7995cee9645SThomas Gleixner } 8005cee9645SThomas Gleixner 8015cee9645SThomas Gleixner timer->expires = expires; 8025cee9645SThomas Gleixner internal_add_timer(base, timer); 8035cee9645SThomas Gleixner 8045cee9645SThomas Gleixner out_unlock: 8055cee9645SThomas Gleixner spin_unlock_irqrestore(&base->lock, flags); 8065cee9645SThomas Gleixner 8075cee9645SThomas Gleixner return ret; 8085cee9645SThomas Gleixner } 8095cee9645SThomas Gleixner 8105cee9645SThomas Gleixner /** 8115cee9645SThomas Gleixner * mod_timer_pending - modify a pending timer's timeout 8125cee9645SThomas Gleixner * @timer: the pending timer to be modified 8135cee9645SThomas Gleixner * @expires: new timeout in jiffies 8145cee9645SThomas Gleixner * 8155cee9645SThomas Gleixner * mod_timer_pending() is the same for pending timers as mod_timer(), 8165cee9645SThomas Gleixner * but will not re-activate and modify already deleted timers. 8175cee9645SThomas Gleixner * 8185cee9645SThomas Gleixner * It is useful for unserialized use of timers. 8195cee9645SThomas Gleixner */ 8205cee9645SThomas Gleixner int mod_timer_pending(struct timer_list *timer, unsigned long expires) 8215cee9645SThomas Gleixner { 8225cee9645SThomas Gleixner return __mod_timer(timer, expires, true, TIMER_NOT_PINNED); 8235cee9645SThomas Gleixner } 8245cee9645SThomas Gleixner EXPORT_SYMBOL(mod_timer_pending); 8255cee9645SThomas Gleixner 8265cee9645SThomas Gleixner /* 8275cee9645SThomas Gleixner * Decide where to put the timer while taking the slack into account 8285cee9645SThomas Gleixner * 8295cee9645SThomas Gleixner * Algorithm: 8305cee9645SThomas Gleixner * 1) calculate the maximum (absolute) time 8315cee9645SThomas Gleixner * 2) calculate the highest bit where the expires and new max are different 8325cee9645SThomas Gleixner * 3) use this bit to make a mask 8335cee9645SThomas Gleixner * 4) use the bitmask to round down the maximum time, so that all last 8345cee9645SThomas Gleixner * bits are zeros 8355cee9645SThomas Gleixner */ 8365cee9645SThomas Gleixner static inline 8375cee9645SThomas Gleixner unsigned long apply_slack(struct timer_list *timer, unsigned long expires) 8385cee9645SThomas Gleixner { 8395cee9645SThomas Gleixner unsigned long expires_limit, mask; 8405cee9645SThomas Gleixner int bit; 8415cee9645SThomas Gleixner 8425cee9645SThomas Gleixner if (timer->slack >= 0) { 8435cee9645SThomas Gleixner expires_limit = expires + timer->slack; 8445cee9645SThomas Gleixner } else { 8455cee9645SThomas Gleixner long delta = expires - jiffies; 8465cee9645SThomas Gleixner 8475cee9645SThomas Gleixner if (delta < 256) 8485cee9645SThomas Gleixner return expires; 8495cee9645SThomas Gleixner 8505cee9645SThomas Gleixner expires_limit = expires + delta / 256; 8515cee9645SThomas Gleixner } 8525cee9645SThomas Gleixner mask = expires ^ expires_limit; 8535cee9645SThomas Gleixner if (mask == 0) 8545cee9645SThomas Gleixner return expires; 8555cee9645SThomas Gleixner 8565cee9645SThomas Gleixner bit = find_last_bit(&mask, BITS_PER_LONG); 8575cee9645SThomas Gleixner 8585cee9645SThomas Gleixner mask = (1UL << bit) - 1; 8595cee9645SThomas Gleixner 8605cee9645SThomas Gleixner expires_limit = expires_limit & ~(mask); 8615cee9645SThomas Gleixner 8625cee9645SThomas Gleixner return expires_limit; 8635cee9645SThomas Gleixner } 8645cee9645SThomas Gleixner 8655cee9645SThomas Gleixner /** 8665cee9645SThomas Gleixner * mod_timer - modify a timer's timeout 8675cee9645SThomas Gleixner * @timer: the timer to be modified 8685cee9645SThomas Gleixner * @expires: new timeout in jiffies 8695cee9645SThomas Gleixner * 8705cee9645SThomas Gleixner * mod_timer() is a more efficient way to update the expire field of an 8715cee9645SThomas Gleixner * active timer (if the timer is inactive it will be activated) 8725cee9645SThomas Gleixner * 8735cee9645SThomas Gleixner * mod_timer(timer, expires) is equivalent to: 8745cee9645SThomas Gleixner * 8755cee9645SThomas Gleixner * del_timer(timer); timer->expires = expires; add_timer(timer); 8765cee9645SThomas Gleixner * 8775cee9645SThomas Gleixner * Note that if there are multiple unserialized concurrent users of the 8785cee9645SThomas Gleixner * same timer, then mod_timer() is the only safe way to modify the timeout, 8795cee9645SThomas Gleixner * since add_timer() cannot modify an already running timer. 8805cee9645SThomas Gleixner * 8815cee9645SThomas Gleixner * The function returns whether it has modified a pending timer or not. 8825cee9645SThomas Gleixner * (ie. mod_timer() of an inactive timer returns 0, mod_timer() of an 8835cee9645SThomas Gleixner * active timer returns 1.) 8845cee9645SThomas Gleixner */ 8855cee9645SThomas Gleixner int mod_timer(struct timer_list *timer, unsigned long expires) 8865cee9645SThomas Gleixner { 8875cee9645SThomas Gleixner expires = apply_slack(timer, expires); 8885cee9645SThomas Gleixner 8895cee9645SThomas Gleixner /* 8905cee9645SThomas Gleixner * This is a common optimization triggered by the 8915cee9645SThomas Gleixner * networking code - if the timer is re-modified 8925cee9645SThomas Gleixner * to be the same thing then just return: 8935cee9645SThomas Gleixner */ 8945cee9645SThomas Gleixner if (timer_pending(timer) && timer->expires == expires) 8955cee9645SThomas Gleixner return 1; 8965cee9645SThomas Gleixner 8975cee9645SThomas Gleixner return __mod_timer(timer, expires, false, TIMER_NOT_PINNED); 8985cee9645SThomas Gleixner } 8995cee9645SThomas Gleixner EXPORT_SYMBOL(mod_timer); 9005cee9645SThomas Gleixner 9015cee9645SThomas Gleixner /** 9025cee9645SThomas Gleixner * mod_timer_pinned - modify a timer's timeout 9035cee9645SThomas Gleixner * @timer: the timer to be modified 9045cee9645SThomas Gleixner * @expires: new timeout in jiffies 9055cee9645SThomas Gleixner * 9065cee9645SThomas Gleixner * mod_timer_pinned() is a way to update the expire field of an 9075cee9645SThomas Gleixner * active timer (if the timer is inactive it will be activated) 9085cee9645SThomas Gleixner * and to ensure that the timer is scheduled on the current CPU. 9095cee9645SThomas Gleixner * 9105cee9645SThomas Gleixner * Note that this does not prevent the timer from being migrated 9115cee9645SThomas Gleixner * when the current CPU goes offline. If this is a problem for 9125cee9645SThomas Gleixner * you, use CPU-hotplug notifiers to handle it correctly, for 9135cee9645SThomas Gleixner * example, cancelling the timer when the corresponding CPU goes 9145cee9645SThomas Gleixner * offline. 9155cee9645SThomas Gleixner * 9165cee9645SThomas Gleixner * mod_timer_pinned(timer, expires) is equivalent to: 9175cee9645SThomas Gleixner * 9185cee9645SThomas Gleixner * del_timer(timer); timer->expires = expires; add_timer(timer); 9195cee9645SThomas Gleixner */ 9205cee9645SThomas Gleixner int mod_timer_pinned(struct timer_list *timer, unsigned long expires) 9215cee9645SThomas Gleixner { 9225cee9645SThomas Gleixner if (timer->expires == expires && timer_pending(timer)) 9235cee9645SThomas Gleixner return 1; 9245cee9645SThomas Gleixner 9255cee9645SThomas Gleixner return __mod_timer(timer, expires, false, TIMER_PINNED); 9265cee9645SThomas Gleixner } 9275cee9645SThomas Gleixner EXPORT_SYMBOL(mod_timer_pinned); 9285cee9645SThomas Gleixner 9295cee9645SThomas Gleixner /** 9305cee9645SThomas Gleixner * add_timer - start a timer 9315cee9645SThomas Gleixner * @timer: the timer to be added 9325cee9645SThomas Gleixner * 9335cee9645SThomas Gleixner * The kernel will do a ->function(->data) callback from the 9345cee9645SThomas Gleixner * timer interrupt at the ->expires point in the future. The 9355cee9645SThomas Gleixner * current time is 'jiffies'. 9365cee9645SThomas Gleixner * 9375cee9645SThomas Gleixner * The timer's ->expires, ->function (and if the handler uses it, ->data) 9385cee9645SThomas Gleixner * fields must be set prior calling this function. 9395cee9645SThomas Gleixner * 9405cee9645SThomas Gleixner * Timers with an ->expires field in the past will be executed in the next 9415cee9645SThomas Gleixner * timer tick. 9425cee9645SThomas Gleixner */ 9435cee9645SThomas Gleixner void add_timer(struct timer_list *timer) 9445cee9645SThomas Gleixner { 9455cee9645SThomas Gleixner BUG_ON(timer_pending(timer)); 9465cee9645SThomas Gleixner mod_timer(timer, timer->expires); 9475cee9645SThomas Gleixner } 9485cee9645SThomas Gleixner EXPORT_SYMBOL(add_timer); 9495cee9645SThomas Gleixner 9505cee9645SThomas Gleixner /** 9515cee9645SThomas Gleixner * add_timer_on - start a timer on a particular CPU 9525cee9645SThomas Gleixner * @timer: the timer to be added 9535cee9645SThomas Gleixner * @cpu: the CPU to start it on 9545cee9645SThomas Gleixner * 9555cee9645SThomas Gleixner * This is not very scalable on SMP. Double adds are not possible. 9565cee9645SThomas Gleixner */ 9575cee9645SThomas Gleixner void add_timer_on(struct timer_list *timer, int cpu) 9585cee9645SThomas Gleixner { 9595cee9645SThomas Gleixner struct tvec_base *base = per_cpu(tvec_bases, cpu); 9605cee9645SThomas Gleixner unsigned long flags; 9615cee9645SThomas Gleixner 9625cee9645SThomas Gleixner timer_stats_timer_set_start_info(timer); 9635cee9645SThomas Gleixner BUG_ON(timer_pending(timer) || !timer->function); 9645cee9645SThomas Gleixner spin_lock_irqsave(&base->lock, flags); 9655cee9645SThomas Gleixner timer_set_base(timer, base); 9665cee9645SThomas Gleixner debug_activate(timer, timer->expires); 9675cee9645SThomas Gleixner internal_add_timer(base, timer); 9685cee9645SThomas Gleixner spin_unlock_irqrestore(&base->lock, flags); 9695cee9645SThomas Gleixner } 9705cee9645SThomas Gleixner EXPORT_SYMBOL_GPL(add_timer_on); 9715cee9645SThomas Gleixner 9725cee9645SThomas Gleixner /** 9735cee9645SThomas Gleixner * del_timer - deactive a timer. 9745cee9645SThomas Gleixner * @timer: the timer to be deactivated 9755cee9645SThomas Gleixner * 9765cee9645SThomas Gleixner * del_timer() deactivates a timer - this works on both active and inactive 9775cee9645SThomas Gleixner * timers. 9785cee9645SThomas Gleixner * 9795cee9645SThomas Gleixner * The function returns whether it has deactivated a pending timer or not. 9805cee9645SThomas Gleixner * (ie. del_timer() of an inactive timer returns 0, del_timer() of an 9815cee9645SThomas Gleixner * active timer returns 1.) 9825cee9645SThomas Gleixner */ 9835cee9645SThomas Gleixner int del_timer(struct timer_list *timer) 9845cee9645SThomas Gleixner { 9855cee9645SThomas Gleixner struct tvec_base *base; 9865cee9645SThomas Gleixner unsigned long flags; 9875cee9645SThomas Gleixner int ret = 0; 9885cee9645SThomas Gleixner 9895cee9645SThomas Gleixner debug_assert_init(timer); 9905cee9645SThomas Gleixner 9915cee9645SThomas Gleixner timer_stats_timer_clear_start_info(timer); 9925cee9645SThomas Gleixner if (timer_pending(timer)) { 9935cee9645SThomas Gleixner base = lock_timer_base(timer, &flags); 9945cee9645SThomas Gleixner ret = detach_if_pending(timer, base, true); 9955cee9645SThomas Gleixner spin_unlock_irqrestore(&base->lock, flags); 9965cee9645SThomas Gleixner } 9975cee9645SThomas Gleixner 9985cee9645SThomas Gleixner return ret; 9995cee9645SThomas Gleixner } 10005cee9645SThomas Gleixner EXPORT_SYMBOL(del_timer); 10015cee9645SThomas Gleixner 10025cee9645SThomas Gleixner /** 10035cee9645SThomas Gleixner * try_to_del_timer_sync - Try to deactivate a timer 10045cee9645SThomas Gleixner * @timer: timer do del 10055cee9645SThomas Gleixner * 10065cee9645SThomas Gleixner * This function tries to deactivate a timer. Upon successful (ret >= 0) 10075cee9645SThomas Gleixner * exit the timer is not queued and the handler is not running on any CPU. 10085cee9645SThomas Gleixner */ 10095cee9645SThomas Gleixner int try_to_del_timer_sync(struct timer_list *timer) 10105cee9645SThomas Gleixner { 10115cee9645SThomas Gleixner struct tvec_base *base; 10125cee9645SThomas Gleixner unsigned long flags; 10135cee9645SThomas Gleixner int ret = -1; 10145cee9645SThomas Gleixner 10155cee9645SThomas Gleixner debug_assert_init(timer); 10165cee9645SThomas Gleixner 10175cee9645SThomas Gleixner base = lock_timer_base(timer, &flags); 10185cee9645SThomas Gleixner 10195cee9645SThomas Gleixner if (base->running_timer != timer) { 10205cee9645SThomas Gleixner timer_stats_timer_clear_start_info(timer); 10215cee9645SThomas Gleixner ret = detach_if_pending(timer, base, true); 10225cee9645SThomas Gleixner } 10235cee9645SThomas Gleixner spin_unlock_irqrestore(&base->lock, flags); 10245cee9645SThomas Gleixner 10255cee9645SThomas Gleixner return ret; 10265cee9645SThomas Gleixner } 10275cee9645SThomas Gleixner EXPORT_SYMBOL(try_to_del_timer_sync); 10285cee9645SThomas Gleixner 10295cee9645SThomas Gleixner #ifdef CONFIG_SMP 10305cee9645SThomas Gleixner /** 10315cee9645SThomas Gleixner * del_timer_sync - deactivate a timer and wait for the handler to finish. 10325cee9645SThomas Gleixner * @timer: the timer to be deactivated 10335cee9645SThomas Gleixner * 10345cee9645SThomas Gleixner * This function only differs from del_timer() on SMP: besides deactivating 10355cee9645SThomas Gleixner * the timer it also makes sure the handler has finished executing on other 10365cee9645SThomas Gleixner * CPUs. 10375cee9645SThomas Gleixner * 10385cee9645SThomas Gleixner * Synchronization rules: Callers must prevent restarting of the timer, 10395cee9645SThomas Gleixner * otherwise this function is meaningless. It must not be called from 10405cee9645SThomas Gleixner * interrupt contexts unless the timer is an irqsafe one. The caller must 10415cee9645SThomas Gleixner * not hold locks which would prevent completion of the timer's 10425cee9645SThomas Gleixner * handler. The timer's handler must not call add_timer_on(). Upon exit the 10435cee9645SThomas Gleixner * timer is not queued and the handler is not running on any CPU. 10445cee9645SThomas Gleixner * 10455cee9645SThomas Gleixner * Note: For !irqsafe timers, you must not hold locks that are held in 10465cee9645SThomas Gleixner * interrupt context while calling this function. Even if the lock has 10475cee9645SThomas Gleixner * nothing to do with the timer in question. Here's why: 10485cee9645SThomas Gleixner * 10495cee9645SThomas Gleixner * CPU0 CPU1 10505cee9645SThomas Gleixner * ---- ---- 10515cee9645SThomas Gleixner * <SOFTIRQ> 10525cee9645SThomas Gleixner * call_timer_fn(); 10535cee9645SThomas Gleixner * base->running_timer = mytimer; 10545cee9645SThomas Gleixner * spin_lock_irq(somelock); 10555cee9645SThomas Gleixner * <IRQ> 10565cee9645SThomas Gleixner * spin_lock(somelock); 10575cee9645SThomas Gleixner * del_timer_sync(mytimer); 10585cee9645SThomas Gleixner * while (base->running_timer == mytimer); 10595cee9645SThomas Gleixner * 10605cee9645SThomas Gleixner * Now del_timer_sync() will never return and never release somelock. 10615cee9645SThomas Gleixner * The interrupt on the other CPU is waiting to grab somelock but 10625cee9645SThomas Gleixner * it has interrupted the softirq that CPU0 is waiting to finish. 10635cee9645SThomas Gleixner * 10645cee9645SThomas Gleixner * The function returns whether it has deactivated a pending timer or not. 10655cee9645SThomas Gleixner */ 10665cee9645SThomas Gleixner int del_timer_sync(struct timer_list *timer) 10675cee9645SThomas Gleixner { 10685cee9645SThomas Gleixner #ifdef CONFIG_LOCKDEP 10695cee9645SThomas Gleixner unsigned long flags; 10705cee9645SThomas Gleixner 10715cee9645SThomas Gleixner /* 10725cee9645SThomas Gleixner * If lockdep gives a backtrace here, please reference 10735cee9645SThomas Gleixner * the synchronization rules above. 10745cee9645SThomas Gleixner */ 10755cee9645SThomas Gleixner local_irq_save(flags); 10765cee9645SThomas Gleixner lock_map_acquire(&timer->lockdep_map); 10775cee9645SThomas Gleixner lock_map_release(&timer->lockdep_map); 10785cee9645SThomas Gleixner local_irq_restore(flags); 10795cee9645SThomas Gleixner #endif 10805cee9645SThomas Gleixner /* 10815cee9645SThomas Gleixner * don't use it in hardirq context, because it 10825cee9645SThomas Gleixner * could lead to deadlock. 10835cee9645SThomas Gleixner */ 10845cee9645SThomas Gleixner WARN_ON(in_irq() && !tbase_get_irqsafe(timer->base)); 10855cee9645SThomas Gleixner for (;;) { 10865cee9645SThomas Gleixner int ret = try_to_del_timer_sync(timer); 10875cee9645SThomas Gleixner if (ret >= 0) 10885cee9645SThomas Gleixner return ret; 10895cee9645SThomas Gleixner cpu_relax(); 10905cee9645SThomas Gleixner } 10915cee9645SThomas Gleixner } 10925cee9645SThomas Gleixner EXPORT_SYMBOL(del_timer_sync); 10935cee9645SThomas Gleixner #endif 10945cee9645SThomas Gleixner 10955cee9645SThomas Gleixner static int cascade(struct tvec_base *base, struct tvec *tv, int index) 10965cee9645SThomas Gleixner { 10975cee9645SThomas Gleixner /* cascade all the timers from tv up one level */ 10985cee9645SThomas Gleixner struct timer_list *timer, *tmp; 10995cee9645SThomas Gleixner struct list_head tv_list; 11005cee9645SThomas Gleixner 11015cee9645SThomas Gleixner list_replace_init(tv->vec + index, &tv_list); 11025cee9645SThomas Gleixner 11035cee9645SThomas Gleixner /* 11045cee9645SThomas Gleixner * We are removing _all_ timers from the list, so we 11055cee9645SThomas Gleixner * don't have to detach them individually. 11065cee9645SThomas Gleixner */ 11075cee9645SThomas Gleixner list_for_each_entry_safe(timer, tmp, &tv_list, entry) { 11085cee9645SThomas Gleixner BUG_ON(tbase_get_base(timer->base) != base); 11095cee9645SThomas Gleixner /* No accounting, while moving them */ 11105cee9645SThomas Gleixner __internal_add_timer(base, timer); 11115cee9645SThomas Gleixner } 11125cee9645SThomas Gleixner 11135cee9645SThomas Gleixner return index; 11145cee9645SThomas Gleixner } 11155cee9645SThomas Gleixner 11165cee9645SThomas Gleixner static void call_timer_fn(struct timer_list *timer, void (*fn)(unsigned long), 11175cee9645SThomas Gleixner unsigned long data) 11185cee9645SThomas Gleixner { 11195cee9645SThomas Gleixner int count = preempt_count(); 11205cee9645SThomas Gleixner 11215cee9645SThomas Gleixner #ifdef CONFIG_LOCKDEP 11225cee9645SThomas Gleixner /* 11235cee9645SThomas Gleixner * It is permissible to free the timer from inside the 11245cee9645SThomas Gleixner * function that is called from it, this we need to take into 11255cee9645SThomas Gleixner * account for lockdep too. To avoid bogus "held lock freed" 11265cee9645SThomas Gleixner * warnings as well as problems when looking into 11275cee9645SThomas Gleixner * timer->lockdep_map, make a copy and use that here. 11285cee9645SThomas Gleixner */ 11295cee9645SThomas Gleixner struct lockdep_map lockdep_map; 11305cee9645SThomas Gleixner 11315cee9645SThomas Gleixner lockdep_copy_map(&lockdep_map, &timer->lockdep_map); 11325cee9645SThomas Gleixner #endif 11335cee9645SThomas Gleixner /* 11345cee9645SThomas Gleixner * Couple the lock chain with the lock chain at 11355cee9645SThomas Gleixner * del_timer_sync() by acquiring the lock_map around the fn() 11365cee9645SThomas Gleixner * call here and in del_timer_sync(). 11375cee9645SThomas Gleixner */ 11385cee9645SThomas Gleixner lock_map_acquire(&lockdep_map); 11395cee9645SThomas Gleixner 11405cee9645SThomas Gleixner trace_timer_expire_entry(timer); 11415cee9645SThomas Gleixner fn(data); 11425cee9645SThomas Gleixner trace_timer_expire_exit(timer); 11435cee9645SThomas Gleixner 11445cee9645SThomas Gleixner lock_map_release(&lockdep_map); 11455cee9645SThomas Gleixner 11465cee9645SThomas Gleixner if (count != preempt_count()) { 11475cee9645SThomas Gleixner WARN_ONCE(1, "timer: %pF preempt leak: %08x -> %08x\n", 11485cee9645SThomas Gleixner fn, count, preempt_count()); 11495cee9645SThomas Gleixner /* 11505cee9645SThomas Gleixner * Restore the preempt count. That gives us a decent 11515cee9645SThomas Gleixner * chance to survive and extract information. If the 11525cee9645SThomas Gleixner * callback kept a lock held, bad luck, but not worse 11535cee9645SThomas Gleixner * than the BUG() we had. 11545cee9645SThomas Gleixner */ 11555cee9645SThomas Gleixner preempt_count_set(count); 11565cee9645SThomas Gleixner } 11575cee9645SThomas Gleixner } 11585cee9645SThomas Gleixner 11595cee9645SThomas Gleixner #define INDEX(N) ((base->timer_jiffies >> (TVR_BITS + (N) * TVN_BITS)) & TVN_MASK) 11605cee9645SThomas Gleixner 11615cee9645SThomas Gleixner /** 11625cee9645SThomas Gleixner * __run_timers - run all expired timers (if any) on this CPU. 11635cee9645SThomas Gleixner * @base: the timer vector to be processed. 11645cee9645SThomas Gleixner * 11655cee9645SThomas Gleixner * This function cascades all vectors and executes all expired timer 11665cee9645SThomas Gleixner * vectors. 11675cee9645SThomas Gleixner */ 11685cee9645SThomas Gleixner static inline void __run_timers(struct tvec_base *base) 11695cee9645SThomas Gleixner { 11705cee9645SThomas Gleixner struct timer_list *timer; 11715cee9645SThomas Gleixner 11725cee9645SThomas Gleixner spin_lock_irq(&base->lock); 11735cee9645SThomas Gleixner if (catchup_timer_jiffies(base)) { 11745cee9645SThomas Gleixner spin_unlock_irq(&base->lock); 11755cee9645SThomas Gleixner return; 11765cee9645SThomas Gleixner } 11775cee9645SThomas Gleixner while (time_after_eq(jiffies, base->timer_jiffies)) { 11785cee9645SThomas Gleixner struct list_head work_list; 11795cee9645SThomas Gleixner struct list_head *head = &work_list; 11805cee9645SThomas Gleixner int index = base->timer_jiffies & TVR_MASK; 11815cee9645SThomas Gleixner 11825cee9645SThomas Gleixner /* 11835cee9645SThomas Gleixner * Cascade timers: 11845cee9645SThomas Gleixner */ 11855cee9645SThomas Gleixner if (!index && 11865cee9645SThomas Gleixner (!cascade(base, &base->tv2, INDEX(0))) && 11875cee9645SThomas Gleixner (!cascade(base, &base->tv3, INDEX(1))) && 11885cee9645SThomas Gleixner !cascade(base, &base->tv4, INDEX(2))) 11895cee9645SThomas Gleixner cascade(base, &base->tv5, INDEX(3)); 11905cee9645SThomas Gleixner ++base->timer_jiffies; 11915cee9645SThomas Gleixner list_replace_init(base->tv1.vec + index, head); 11925cee9645SThomas Gleixner while (!list_empty(head)) { 11935cee9645SThomas Gleixner void (*fn)(unsigned long); 11945cee9645SThomas Gleixner unsigned long data; 11955cee9645SThomas Gleixner bool irqsafe; 11965cee9645SThomas Gleixner 11975cee9645SThomas Gleixner timer = list_first_entry(head, struct timer_list,entry); 11985cee9645SThomas Gleixner fn = timer->function; 11995cee9645SThomas Gleixner data = timer->data; 12005cee9645SThomas Gleixner irqsafe = tbase_get_irqsafe(timer->base); 12015cee9645SThomas Gleixner 12025cee9645SThomas Gleixner timer_stats_account_timer(timer); 12035cee9645SThomas Gleixner 12045cee9645SThomas Gleixner base->running_timer = timer; 12055cee9645SThomas Gleixner detach_expired_timer(timer, base); 12065cee9645SThomas Gleixner 12075cee9645SThomas Gleixner if (irqsafe) { 12085cee9645SThomas Gleixner spin_unlock(&base->lock); 12095cee9645SThomas Gleixner call_timer_fn(timer, fn, data); 12105cee9645SThomas Gleixner spin_lock(&base->lock); 12115cee9645SThomas Gleixner } else { 12125cee9645SThomas Gleixner spin_unlock_irq(&base->lock); 12135cee9645SThomas Gleixner call_timer_fn(timer, fn, data); 12145cee9645SThomas Gleixner spin_lock_irq(&base->lock); 12155cee9645SThomas Gleixner } 12165cee9645SThomas Gleixner } 12175cee9645SThomas Gleixner } 12185cee9645SThomas Gleixner base->running_timer = NULL; 12195cee9645SThomas Gleixner spin_unlock_irq(&base->lock); 12205cee9645SThomas Gleixner } 12215cee9645SThomas Gleixner 12225cee9645SThomas Gleixner #ifdef CONFIG_NO_HZ_COMMON 12235cee9645SThomas Gleixner /* 12245cee9645SThomas Gleixner * Find out when the next timer event is due to happen. This 12255cee9645SThomas Gleixner * is used on S/390 to stop all activity when a CPU is idle. 12265cee9645SThomas Gleixner * This function needs to be called with interrupts disabled. 12275cee9645SThomas Gleixner */ 12285cee9645SThomas Gleixner static unsigned long __next_timer_interrupt(struct tvec_base *base) 12295cee9645SThomas Gleixner { 12305cee9645SThomas Gleixner unsigned long timer_jiffies = base->timer_jiffies; 12315cee9645SThomas Gleixner unsigned long expires = timer_jiffies + NEXT_TIMER_MAX_DELTA; 12325cee9645SThomas Gleixner int index, slot, array, found = 0; 12335cee9645SThomas Gleixner struct timer_list *nte; 12345cee9645SThomas Gleixner struct tvec *varray[4]; 12355cee9645SThomas Gleixner 12365cee9645SThomas Gleixner /* Look for timer events in tv1. */ 12375cee9645SThomas Gleixner index = slot = timer_jiffies & TVR_MASK; 12385cee9645SThomas Gleixner do { 12395cee9645SThomas Gleixner list_for_each_entry(nte, base->tv1.vec + slot, entry) { 12405cee9645SThomas Gleixner if (tbase_get_deferrable(nte->base)) 12415cee9645SThomas Gleixner continue; 12425cee9645SThomas Gleixner 12435cee9645SThomas Gleixner found = 1; 12445cee9645SThomas Gleixner expires = nte->expires; 12455cee9645SThomas Gleixner /* Look at the cascade bucket(s)? */ 12465cee9645SThomas Gleixner if (!index || slot < index) 12475cee9645SThomas Gleixner goto cascade; 12485cee9645SThomas Gleixner return expires; 12495cee9645SThomas Gleixner } 12505cee9645SThomas Gleixner slot = (slot + 1) & TVR_MASK; 12515cee9645SThomas Gleixner } while (slot != index); 12525cee9645SThomas Gleixner 12535cee9645SThomas Gleixner cascade: 12545cee9645SThomas Gleixner /* Calculate the next cascade event */ 12555cee9645SThomas Gleixner if (index) 12565cee9645SThomas Gleixner timer_jiffies += TVR_SIZE - index; 12575cee9645SThomas Gleixner timer_jiffies >>= TVR_BITS; 12585cee9645SThomas Gleixner 12595cee9645SThomas Gleixner /* Check tv2-tv5. */ 12605cee9645SThomas Gleixner varray[0] = &base->tv2; 12615cee9645SThomas Gleixner varray[1] = &base->tv3; 12625cee9645SThomas Gleixner varray[2] = &base->tv4; 12635cee9645SThomas Gleixner varray[3] = &base->tv5; 12645cee9645SThomas Gleixner 12655cee9645SThomas Gleixner for (array = 0; array < 4; array++) { 12665cee9645SThomas Gleixner struct tvec *varp = varray[array]; 12675cee9645SThomas Gleixner 12685cee9645SThomas Gleixner index = slot = timer_jiffies & TVN_MASK; 12695cee9645SThomas Gleixner do { 12705cee9645SThomas Gleixner list_for_each_entry(nte, varp->vec + slot, entry) { 12715cee9645SThomas Gleixner if (tbase_get_deferrable(nte->base)) 12725cee9645SThomas Gleixner continue; 12735cee9645SThomas Gleixner 12745cee9645SThomas Gleixner found = 1; 12755cee9645SThomas Gleixner if (time_before(nte->expires, expires)) 12765cee9645SThomas Gleixner expires = nte->expires; 12775cee9645SThomas Gleixner } 12785cee9645SThomas Gleixner /* 12795cee9645SThomas Gleixner * Do we still search for the first timer or are 12805cee9645SThomas Gleixner * we looking up the cascade buckets ? 12815cee9645SThomas Gleixner */ 12825cee9645SThomas Gleixner if (found) { 12835cee9645SThomas Gleixner /* Look at the cascade bucket(s)? */ 12845cee9645SThomas Gleixner if (!index || slot < index) 12855cee9645SThomas Gleixner break; 12865cee9645SThomas Gleixner return expires; 12875cee9645SThomas Gleixner } 12885cee9645SThomas Gleixner slot = (slot + 1) & TVN_MASK; 12895cee9645SThomas Gleixner } while (slot != index); 12905cee9645SThomas Gleixner 12915cee9645SThomas Gleixner if (index) 12925cee9645SThomas Gleixner timer_jiffies += TVN_SIZE - index; 12935cee9645SThomas Gleixner timer_jiffies >>= TVN_BITS; 12945cee9645SThomas Gleixner } 12955cee9645SThomas Gleixner return expires; 12965cee9645SThomas Gleixner } 12975cee9645SThomas Gleixner 12985cee9645SThomas Gleixner /* 12995cee9645SThomas Gleixner * Check, if the next hrtimer event is before the next timer wheel 13005cee9645SThomas Gleixner * event: 13015cee9645SThomas Gleixner */ 13025cee9645SThomas Gleixner static unsigned long cmp_next_hrtimer_event(unsigned long now, 13035cee9645SThomas Gleixner unsigned long expires) 13045cee9645SThomas Gleixner { 13055cee9645SThomas Gleixner ktime_t hr_delta = hrtimer_get_next_event(); 13065cee9645SThomas Gleixner struct timespec tsdelta; 13075cee9645SThomas Gleixner unsigned long delta; 13085cee9645SThomas Gleixner 13095cee9645SThomas Gleixner if (hr_delta.tv64 == KTIME_MAX) 13105cee9645SThomas Gleixner return expires; 13115cee9645SThomas Gleixner 13125cee9645SThomas Gleixner /* 13135cee9645SThomas Gleixner * Expired timer available, let it expire in the next tick 13145cee9645SThomas Gleixner */ 13155cee9645SThomas Gleixner if (hr_delta.tv64 <= 0) 13165cee9645SThomas Gleixner return now + 1; 13175cee9645SThomas Gleixner 13185cee9645SThomas Gleixner tsdelta = ktime_to_timespec(hr_delta); 13195cee9645SThomas Gleixner delta = timespec_to_jiffies(&tsdelta); 13205cee9645SThomas Gleixner 13215cee9645SThomas Gleixner /* 13225cee9645SThomas Gleixner * Limit the delta to the max value, which is checked in 13235cee9645SThomas Gleixner * tick_nohz_stop_sched_tick(): 13245cee9645SThomas Gleixner */ 13255cee9645SThomas Gleixner if (delta > NEXT_TIMER_MAX_DELTA) 13265cee9645SThomas Gleixner delta = NEXT_TIMER_MAX_DELTA; 13275cee9645SThomas Gleixner 13285cee9645SThomas Gleixner /* 13295cee9645SThomas Gleixner * Take rounding errors in to account and make sure, that it 13305cee9645SThomas Gleixner * expires in the next tick. Otherwise we go into an endless 13315cee9645SThomas Gleixner * ping pong due to tick_nohz_stop_sched_tick() retriggering 13325cee9645SThomas Gleixner * the timer softirq 13335cee9645SThomas Gleixner */ 13345cee9645SThomas Gleixner if (delta < 1) 13355cee9645SThomas Gleixner delta = 1; 13365cee9645SThomas Gleixner now += delta; 13375cee9645SThomas Gleixner if (time_before(now, expires)) 13385cee9645SThomas Gleixner return now; 13395cee9645SThomas Gleixner return expires; 13405cee9645SThomas Gleixner } 13415cee9645SThomas Gleixner 13425cee9645SThomas Gleixner /** 13435cee9645SThomas Gleixner * get_next_timer_interrupt - return the jiffy of the next pending timer 13445cee9645SThomas Gleixner * @now: current time (in jiffies) 13455cee9645SThomas Gleixner */ 13465cee9645SThomas Gleixner unsigned long get_next_timer_interrupt(unsigned long now) 13475cee9645SThomas Gleixner { 13485cee9645SThomas Gleixner struct tvec_base *base = __this_cpu_read(tvec_bases); 13495cee9645SThomas Gleixner unsigned long expires = now + NEXT_TIMER_MAX_DELTA; 13505cee9645SThomas Gleixner 13515cee9645SThomas Gleixner /* 13525cee9645SThomas Gleixner * Pretend that there is no timer pending if the cpu is offline. 13535cee9645SThomas Gleixner * Possible pending timers will be migrated later to an active cpu. 13545cee9645SThomas Gleixner */ 13555cee9645SThomas Gleixner if (cpu_is_offline(smp_processor_id())) 13565cee9645SThomas Gleixner return expires; 13575cee9645SThomas Gleixner 13585cee9645SThomas Gleixner spin_lock(&base->lock); 13595cee9645SThomas Gleixner if (base->active_timers) { 13605cee9645SThomas Gleixner if (time_before_eq(base->next_timer, base->timer_jiffies)) 13615cee9645SThomas Gleixner base->next_timer = __next_timer_interrupt(base); 13625cee9645SThomas Gleixner expires = base->next_timer; 13635cee9645SThomas Gleixner } 13645cee9645SThomas Gleixner spin_unlock(&base->lock); 13655cee9645SThomas Gleixner 13665cee9645SThomas Gleixner if (time_before_eq(expires, now)) 13675cee9645SThomas Gleixner return now; 13685cee9645SThomas Gleixner 13695cee9645SThomas Gleixner return cmp_next_hrtimer_event(now, expires); 13705cee9645SThomas Gleixner } 13715cee9645SThomas Gleixner #endif 13725cee9645SThomas Gleixner 13735cee9645SThomas Gleixner /* 13745cee9645SThomas Gleixner * Called from the timer interrupt handler to charge one tick to the current 13755cee9645SThomas Gleixner * process. user_tick is 1 if the tick is user time, 0 for system. 13765cee9645SThomas Gleixner */ 13775cee9645SThomas Gleixner void update_process_times(int user_tick) 13785cee9645SThomas Gleixner { 13795cee9645SThomas Gleixner struct task_struct *p = current; 13805cee9645SThomas Gleixner int cpu = smp_processor_id(); 13815cee9645SThomas Gleixner 13825cee9645SThomas Gleixner /* Note: this timer irq context must be accounted for as well. */ 13835cee9645SThomas Gleixner account_process_tick(p, user_tick); 13845cee9645SThomas Gleixner run_local_timers(); 13855cee9645SThomas Gleixner rcu_check_callbacks(cpu, user_tick); 13865cee9645SThomas Gleixner #ifdef CONFIG_IRQ_WORK 13875cee9645SThomas Gleixner if (in_irq()) 13885cee9645SThomas Gleixner irq_work_run(); 13895cee9645SThomas Gleixner #endif 13905cee9645SThomas Gleixner scheduler_tick(); 13915cee9645SThomas Gleixner run_posix_cpu_timers(p); 13925cee9645SThomas Gleixner } 13935cee9645SThomas Gleixner 13945cee9645SThomas Gleixner /* 13955cee9645SThomas Gleixner * This function runs timers and the timer-tq in bottom half context. 13965cee9645SThomas Gleixner */ 13975cee9645SThomas Gleixner static void run_timer_softirq(struct softirq_action *h) 13985cee9645SThomas Gleixner { 13995cee9645SThomas Gleixner struct tvec_base *base = __this_cpu_read(tvec_bases); 14005cee9645SThomas Gleixner 14015cee9645SThomas Gleixner hrtimer_run_pending(); 14025cee9645SThomas Gleixner 14035cee9645SThomas Gleixner if (time_after_eq(jiffies, base->timer_jiffies)) 14045cee9645SThomas Gleixner __run_timers(base); 14055cee9645SThomas Gleixner } 14065cee9645SThomas Gleixner 14075cee9645SThomas Gleixner /* 14085cee9645SThomas Gleixner * Called by the local, per-CPU timer interrupt on SMP. 14095cee9645SThomas Gleixner */ 14105cee9645SThomas Gleixner void run_local_timers(void) 14115cee9645SThomas Gleixner { 14125cee9645SThomas Gleixner hrtimer_run_queues(); 14135cee9645SThomas Gleixner raise_softirq(TIMER_SOFTIRQ); 14145cee9645SThomas Gleixner } 14155cee9645SThomas Gleixner 14165cee9645SThomas Gleixner #ifdef __ARCH_WANT_SYS_ALARM 14175cee9645SThomas Gleixner 14185cee9645SThomas Gleixner /* 14195cee9645SThomas Gleixner * For backwards compatibility? This can be done in libc so Alpha 14205cee9645SThomas Gleixner * and all newer ports shouldn't need it. 14215cee9645SThomas Gleixner */ 14225cee9645SThomas Gleixner SYSCALL_DEFINE1(alarm, unsigned int, seconds) 14235cee9645SThomas Gleixner { 14245cee9645SThomas Gleixner return alarm_setitimer(seconds); 14255cee9645SThomas Gleixner } 14265cee9645SThomas Gleixner 14275cee9645SThomas Gleixner #endif 14285cee9645SThomas Gleixner 14295cee9645SThomas Gleixner static void process_timeout(unsigned long __data) 14305cee9645SThomas Gleixner { 14315cee9645SThomas Gleixner wake_up_process((struct task_struct *)__data); 14325cee9645SThomas Gleixner } 14335cee9645SThomas Gleixner 14345cee9645SThomas Gleixner /** 14355cee9645SThomas Gleixner * schedule_timeout - sleep until timeout 14365cee9645SThomas Gleixner * @timeout: timeout value in jiffies 14375cee9645SThomas Gleixner * 14385cee9645SThomas Gleixner * Make the current task sleep until @timeout jiffies have 14395cee9645SThomas Gleixner * elapsed. The routine will return immediately unless 14405cee9645SThomas Gleixner * the current task state has been set (see set_current_state()). 14415cee9645SThomas Gleixner * 14425cee9645SThomas Gleixner * You can set the task state as follows - 14435cee9645SThomas Gleixner * 14445cee9645SThomas Gleixner * %TASK_UNINTERRUPTIBLE - at least @timeout jiffies are guaranteed to 14455cee9645SThomas Gleixner * pass before the routine returns. The routine will return 0 14465cee9645SThomas Gleixner * 14475cee9645SThomas Gleixner * %TASK_INTERRUPTIBLE - the routine may return early if a signal is 14485cee9645SThomas Gleixner * delivered to the current task. In this case the remaining time 14495cee9645SThomas Gleixner * in jiffies will be returned, or 0 if the timer expired in time 14505cee9645SThomas Gleixner * 14515cee9645SThomas Gleixner * The current task state is guaranteed to be TASK_RUNNING when this 14525cee9645SThomas Gleixner * routine returns. 14535cee9645SThomas Gleixner * 14545cee9645SThomas Gleixner * Specifying a @timeout value of %MAX_SCHEDULE_TIMEOUT will schedule 14555cee9645SThomas Gleixner * the CPU away without a bound on the timeout. In this case the return 14565cee9645SThomas Gleixner * value will be %MAX_SCHEDULE_TIMEOUT. 14575cee9645SThomas Gleixner * 14585cee9645SThomas Gleixner * In all cases the return value is guaranteed to be non-negative. 14595cee9645SThomas Gleixner */ 14605cee9645SThomas Gleixner signed long __sched schedule_timeout(signed long timeout) 14615cee9645SThomas Gleixner { 14625cee9645SThomas Gleixner struct timer_list timer; 14635cee9645SThomas Gleixner unsigned long expire; 14645cee9645SThomas Gleixner 14655cee9645SThomas Gleixner switch (timeout) 14665cee9645SThomas Gleixner { 14675cee9645SThomas Gleixner case MAX_SCHEDULE_TIMEOUT: 14685cee9645SThomas Gleixner /* 14695cee9645SThomas Gleixner * These two special cases are useful to be comfortable 14705cee9645SThomas Gleixner * in the caller. Nothing more. We could take 14715cee9645SThomas Gleixner * MAX_SCHEDULE_TIMEOUT from one of the negative value 14725cee9645SThomas Gleixner * but I' d like to return a valid offset (>=0) to allow 14735cee9645SThomas Gleixner * the caller to do everything it want with the retval. 14745cee9645SThomas Gleixner */ 14755cee9645SThomas Gleixner schedule(); 14765cee9645SThomas Gleixner goto out; 14775cee9645SThomas Gleixner default: 14785cee9645SThomas Gleixner /* 14795cee9645SThomas Gleixner * Another bit of PARANOID. Note that the retval will be 14805cee9645SThomas Gleixner * 0 since no piece of kernel is supposed to do a check 14815cee9645SThomas Gleixner * for a negative retval of schedule_timeout() (since it 14825cee9645SThomas Gleixner * should never happens anyway). You just have the printk() 14835cee9645SThomas Gleixner * that will tell you if something is gone wrong and where. 14845cee9645SThomas Gleixner */ 14855cee9645SThomas Gleixner if (timeout < 0) { 14865cee9645SThomas Gleixner printk(KERN_ERR "schedule_timeout: wrong timeout " 14875cee9645SThomas Gleixner "value %lx\n", timeout); 14885cee9645SThomas Gleixner dump_stack(); 14895cee9645SThomas Gleixner current->state = TASK_RUNNING; 14905cee9645SThomas Gleixner goto out; 14915cee9645SThomas Gleixner } 14925cee9645SThomas Gleixner } 14935cee9645SThomas Gleixner 14945cee9645SThomas Gleixner expire = timeout + jiffies; 14955cee9645SThomas Gleixner 14965cee9645SThomas Gleixner setup_timer_on_stack(&timer, process_timeout, (unsigned long)current); 14975cee9645SThomas Gleixner __mod_timer(&timer, expire, false, TIMER_NOT_PINNED); 14985cee9645SThomas Gleixner schedule(); 14995cee9645SThomas Gleixner del_singleshot_timer_sync(&timer); 15005cee9645SThomas Gleixner 15015cee9645SThomas Gleixner /* Remove the timer from the object tracker */ 15025cee9645SThomas Gleixner destroy_timer_on_stack(&timer); 15035cee9645SThomas Gleixner 15045cee9645SThomas Gleixner timeout = expire - jiffies; 15055cee9645SThomas Gleixner 15065cee9645SThomas Gleixner out: 15075cee9645SThomas Gleixner return timeout < 0 ? 0 : timeout; 15085cee9645SThomas Gleixner } 15095cee9645SThomas Gleixner EXPORT_SYMBOL(schedule_timeout); 15105cee9645SThomas Gleixner 15115cee9645SThomas Gleixner /* 15125cee9645SThomas Gleixner * We can use __set_current_state() here because schedule_timeout() calls 15135cee9645SThomas Gleixner * schedule() unconditionally. 15145cee9645SThomas Gleixner */ 15155cee9645SThomas Gleixner signed long __sched schedule_timeout_interruptible(signed long timeout) 15165cee9645SThomas Gleixner { 15175cee9645SThomas Gleixner __set_current_state(TASK_INTERRUPTIBLE); 15185cee9645SThomas Gleixner return schedule_timeout(timeout); 15195cee9645SThomas Gleixner } 15205cee9645SThomas Gleixner EXPORT_SYMBOL(schedule_timeout_interruptible); 15215cee9645SThomas Gleixner 15225cee9645SThomas Gleixner signed long __sched schedule_timeout_killable(signed long timeout) 15235cee9645SThomas Gleixner { 15245cee9645SThomas Gleixner __set_current_state(TASK_KILLABLE); 15255cee9645SThomas Gleixner return schedule_timeout(timeout); 15265cee9645SThomas Gleixner } 15275cee9645SThomas Gleixner EXPORT_SYMBOL(schedule_timeout_killable); 15285cee9645SThomas Gleixner 15295cee9645SThomas Gleixner signed long __sched schedule_timeout_uninterruptible(signed long timeout) 15305cee9645SThomas Gleixner { 15315cee9645SThomas Gleixner __set_current_state(TASK_UNINTERRUPTIBLE); 15325cee9645SThomas Gleixner return schedule_timeout(timeout); 15335cee9645SThomas Gleixner } 15345cee9645SThomas Gleixner EXPORT_SYMBOL(schedule_timeout_uninterruptible); 15355cee9645SThomas Gleixner 15365cee9645SThomas Gleixner static int init_timers_cpu(int cpu) 15375cee9645SThomas Gleixner { 15385cee9645SThomas Gleixner int j; 15395cee9645SThomas Gleixner struct tvec_base *base; 15405cee9645SThomas Gleixner static char tvec_base_done[NR_CPUS]; 15415cee9645SThomas Gleixner 15425cee9645SThomas Gleixner if (!tvec_base_done[cpu]) { 15435cee9645SThomas Gleixner static char boot_done; 15445cee9645SThomas Gleixner 15455cee9645SThomas Gleixner if (boot_done) { 15465cee9645SThomas Gleixner /* 15475cee9645SThomas Gleixner * The APs use this path later in boot 15485cee9645SThomas Gleixner */ 15495cee9645SThomas Gleixner base = kzalloc_node(sizeof(*base), GFP_KERNEL, 15505cee9645SThomas Gleixner cpu_to_node(cpu)); 15515cee9645SThomas Gleixner if (!base) 15525cee9645SThomas Gleixner return -ENOMEM; 15535cee9645SThomas Gleixner 15545cee9645SThomas Gleixner /* Make sure tvec_base has TIMER_FLAG_MASK bits free */ 15555cee9645SThomas Gleixner if (WARN_ON(base != tbase_get_base(base))) { 15565cee9645SThomas Gleixner kfree(base); 15575cee9645SThomas Gleixner return -ENOMEM; 15585cee9645SThomas Gleixner } 15595cee9645SThomas Gleixner per_cpu(tvec_bases, cpu) = base; 15605cee9645SThomas Gleixner } else { 15615cee9645SThomas Gleixner /* 15625cee9645SThomas Gleixner * This is for the boot CPU - we use compile-time 15635cee9645SThomas Gleixner * static initialisation because per-cpu memory isn't 15645cee9645SThomas Gleixner * ready yet and because the memory allocators are not 15655cee9645SThomas Gleixner * initialised either. 15665cee9645SThomas Gleixner */ 15675cee9645SThomas Gleixner boot_done = 1; 15685cee9645SThomas Gleixner base = &boot_tvec_bases; 15695cee9645SThomas Gleixner } 15705cee9645SThomas Gleixner spin_lock_init(&base->lock); 15715cee9645SThomas Gleixner tvec_base_done[cpu] = 1; 1572d6f93829SViresh Kumar base->cpu = cpu; 15735cee9645SThomas Gleixner } else { 15745cee9645SThomas Gleixner base = per_cpu(tvec_bases, cpu); 15755cee9645SThomas Gleixner } 15765cee9645SThomas Gleixner 15775cee9645SThomas Gleixner 15785cee9645SThomas Gleixner for (j = 0; j < TVN_SIZE; j++) { 15795cee9645SThomas Gleixner INIT_LIST_HEAD(base->tv5.vec + j); 15805cee9645SThomas Gleixner INIT_LIST_HEAD(base->tv4.vec + j); 15815cee9645SThomas Gleixner INIT_LIST_HEAD(base->tv3.vec + j); 15825cee9645SThomas Gleixner INIT_LIST_HEAD(base->tv2.vec + j); 15835cee9645SThomas Gleixner } 15845cee9645SThomas Gleixner for (j = 0; j < TVR_SIZE; j++) 15855cee9645SThomas Gleixner INIT_LIST_HEAD(base->tv1.vec + j); 15865cee9645SThomas Gleixner 15875cee9645SThomas Gleixner base->timer_jiffies = jiffies; 15885cee9645SThomas Gleixner base->next_timer = base->timer_jiffies; 15895cee9645SThomas Gleixner base->active_timers = 0; 15905cee9645SThomas Gleixner base->all_timers = 0; 15915cee9645SThomas Gleixner return 0; 15925cee9645SThomas Gleixner } 15935cee9645SThomas Gleixner 15945cee9645SThomas Gleixner #ifdef CONFIG_HOTPLUG_CPU 15955cee9645SThomas Gleixner static void migrate_timer_list(struct tvec_base *new_base, struct list_head *head) 15965cee9645SThomas Gleixner { 15975cee9645SThomas Gleixner struct timer_list *timer; 15985cee9645SThomas Gleixner 15995cee9645SThomas Gleixner while (!list_empty(head)) { 16005cee9645SThomas Gleixner timer = list_first_entry(head, struct timer_list, entry); 16015cee9645SThomas Gleixner /* We ignore the accounting on the dying cpu */ 16025cee9645SThomas Gleixner detach_timer(timer, false); 16035cee9645SThomas Gleixner timer_set_base(timer, new_base); 16045cee9645SThomas Gleixner internal_add_timer(new_base, timer); 16055cee9645SThomas Gleixner } 16065cee9645SThomas Gleixner } 16075cee9645SThomas Gleixner 16085cee9645SThomas Gleixner static void migrate_timers(int cpu) 16095cee9645SThomas Gleixner { 16105cee9645SThomas Gleixner struct tvec_base *old_base; 16115cee9645SThomas Gleixner struct tvec_base *new_base; 16125cee9645SThomas Gleixner int i; 16135cee9645SThomas Gleixner 16145cee9645SThomas Gleixner BUG_ON(cpu_online(cpu)); 16155cee9645SThomas Gleixner old_base = per_cpu(tvec_bases, cpu); 16165cee9645SThomas Gleixner new_base = get_cpu_var(tvec_bases); 16175cee9645SThomas Gleixner /* 16185cee9645SThomas Gleixner * The caller is globally serialized and nobody else 16195cee9645SThomas Gleixner * takes two locks at once, deadlock is not possible. 16205cee9645SThomas Gleixner */ 16215cee9645SThomas Gleixner spin_lock_irq(&new_base->lock); 16225cee9645SThomas Gleixner spin_lock_nested(&old_base->lock, SINGLE_DEPTH_NESTING); 16235cee9645SThomas Gleixner 16245cee9645SThomas Gleixner BUG_ON(old_base->running_timer); 16255cee9645SThomas Gleixner 16265cee9645SThomas Gleixner for (i = 0; i < TVR_SIZE; i++) 16275cee9645SThomas Gleixner migrate_timer_list(new_base, old_base->tv1.vec + i); 16285cee9645SThomas Gleixner for (i = 0; i < TVN_SIZE; i++) { 16295cee9645SThomas Gleixner migrate_timer_list(new_base, old_base->tv2.vec + i); 16305cee9645SThomas Gleixner migrate_timer_list(new_base, old_base->tv3.vec + i); 16315cee9645SThomas Gleixner migrate_timer_list(new_base, old_base->tv4.vec + i); 16325cee9645SThomas Gleixner migrate_timer_list(new_base, old_base->tv5.vec + i); 16335cee9645SThomas Gleixner } 16345cee9645SThomas Gleixner 16355cee9645SThomas Gleixner spin_unlock(&old_base->lock); 16365cee9645SThomas Gleixner spin_unlock_irq(&new_base->lock); 16375cee9645SThomas Gleixner put_cpu_var(tvec_bases); 16385cee9645SThomas Gleixner } 16395cee9645SThomas Gleixner #endif /* CONFIG_HOTPLUG_CPU */ 16405cee9645SThomas Gleixner 16415cee9645SThomas Gleixner static int timer_cpu_notify(struct notifier_block *self, 16425cee9645SThomas Gleixner unsigned long action, void *hcpu) 16435cee9645SThomas Gleixner { 16445cee9645SThomas Gleixner long cpu = (long)hcpu; 16455cee9645SThomas Gleixner int err; 16465cee9645SThomas Gleixner 16475cee9645SThomas Gleixner switch(action) { 16485cee9645SThomas Gleixner case CPU_UP_PREPARE: 16495cee9645SThomas Gleixner case CPU_UP_PREPARE_FROZEN: 16505cee9645SThomas Gleixner err = init_timers_cpu(cpu); 16515cee9645SThomas Gleixner if (err < 0) 16525cee9645SThomas Gleixner return notifier_from_errno(err); 16535cee9645SThomas Gleixner break; 16545cee9645SThomas Gleixner #ifdef CONFIG_HOTPLUG_CPU 16555cee9645SThomas Gleixner case CPU_DEAD: 16565cee9645SThomas Gleixner case CPU_DEAD_FROZEN: 16575cee9645SThomas Gleixner migrate_timers(cpu); 16585cee9645SThomas Gleixner break; 16595cee9645SThomas Gleixner #endif 16605cee9645SThomas Gleixner default: 16615cee9645SThomas Gleixner break; 16625cee9645SThomas Gleixner } 16635cee9645SThomas Gleixner return NOTIFY_OK; 16645cee9645SThomas Gleixner } 16655cee9645SThomas Gleixner 16665cee9645SThomas Gleixner static struct notifier_block timers_nb = { 16675cee9645SThomas Gleixner .notifier_call = timer_cpu_notify, 16685cee9645SThomas Gleixner }; 16695cee9645SThomas Gleixner 16705cee9645SThomas Gleixner 16715cee9645SThomas Gleixner void __init init_timers(void) 16725cee9645SThomas Gleixner { 16735cee9645SThomas Gleixner int err; 16745cee9645SThomas Gleixner 16755cee9645SThomas Gleixner /* ensure there are enough low bits for flags in timer->base pointer */ 16765cee9645SThomas Gleixner BUILD_BUG_ON(__alignof__(struct tvec_base) & TIMER_FLAG_MASK); 16775cee9645SThomas Gleixner 16785cee9645SThomas Gleixner err = timer_cpu_notify(&timers_nb, (unsigned long)CPU_UP_PREPARE, 16795cee9645SThomas Gleixner (void *)(long)smp_processor_id()); 16805cee9645SThomas Gleixner BUG_ON(err != NOTIFY_OK); 16815cee9645SThomas Gleixner 16825cee9645SThomas Gleixner init_timer_stats(); 16835cee9645SThomas Gleixner register_cpu_notifier(&timers_nb); 16845cee9645SThomas Gleixner open_softirq(TIMER_SOFTIRQ, run_timer_softirq); 16855cee9645SThomas Gleixner } 16865cee9645SThomas Gleixner 16875cee9645SThomas Gleixner /** 16885cee9645SThomas Gleixner * msleep - sleep safely even with waitqueue interruptions 16895cee9645SThomas Gleixner * @msecs: Time in milliseconds to sleep for 16905cee9645SThomas Gleixner */ 16915cee9645SThomas Gleixner void msleep(unsigned int msecs) 16925cee9645SThomas Gleixner { 16935cee9645SThomas Gleixner unsigned long timeout = msecs_to_jiffies(msecs) + 1; 16945cee9645SThomas Gleixner 16955cee9645SThomas Gleixner while (timeout) 16965cee9645SThomas Gleixner timeout = schedule_timeout_uninterruptible(timeout); 16975cee9645SThomas Gleixner } 16985cee9645SThomas Gleixner 16995cee9645SThomas Gleixner EXPORT_SYMBOL(msleep); 17005cee9645SThomas Gleixner 17015cee9645SThomas Gleixner /** 17025cee9645SThomas Gleixner * msleep_interruptible - sleep waiting for signals 17035cee9645SThomas Gleixner * @msecs: Time in milliseconds to sleep for 17045cee9645SThomas Gleixner */ 17055cee9645SThomas Gleixner unsigned long msleep_interruptible(unsigned int msecs) 17065cee9645SThomas Gleixner { 17075cee9645SThomas Gleixner unsigned long timeout = msecs_to_jiffies(msecs) + 1; 17085cee9645SThomas Gleixner 17095cee9645SThomas Gleixner while (timeout && !signal_pending(current)) 17105cee9645SThomas Gleixner timeout = schedule_timeout_interruptible(timeout); 17115cee9645SThomas Gleixner return jiffies_to_msecs(timeout); 17125cee9645SThomas Gleixner } 17135cee9645SThomas Gleixner 17145cee9645SThomas Gleixner EXPORT_SYMBOL(msleep_interruptible); 17155cee9645SThomas Gleixner 17165cee9645SThomas Gleixner static int __sched do_usleep_range(unsigned long min, unsigned long max) 17175cee9645SThomas Gleixner { 17185cee9645SThomas Gleixner ktime_t kmin; 17195cee9645SThomas Gleixner unsigned long delta; 17205cee9645SThomas Gleixner 17215cee9645SThomas Gleixner kmin = ktime_set(0, min * NSEC_PER_USEC); 17225cee9645SThomas Gleixner delta = (max - min) * NSEC_PER_USEC; 17235cee9645SThomas Gleixner return schedule_hrtimeout_range(&kmin, delta, HRTIMER_MODE_REL); 17245cee9645SThomas Gleixner } 17255cee9645SThomas Gleixner 17265cee9645SThomas Gleixner /** 17275cee9645SThomas Gleixner * usleep_range - Drop in replacement for udelay where wakeup is flexible 17285cee9645SThomas Gleixner * @min: Minimum time in usecs to sleep 17295cee9645SThomas Gleixner * @max: Maximum time in usecs to sleep 17305cee9645SThomas Gleixner */ 17315cee9645SThomas Gleixner void usleep_range(unsigned long min, unsigned long max) 17325cee9645SThomas Gleixner { 17335cee9645SThomas Gleixner __set_current_state(TASK_UNINTERRUPTIBLE); 17345cee9645SThomas Gleixner do_usleep_range(min, max); 17355cee9645SThomas Gleixner } 17365cee9645SThomas Gleixner EXPORT_SYMBOL(usleep_range); 1737